【问题标题】:Removing duplicate blank lines with awk使用 awk 删除重复的空行
【发布时间】:2020-04-06 13:19:31
【问题描述】:

对于我上课的一个问题,我有一个文件,我要在其中删除文件中重复的空白行。例如,我有一个如下所示的输入文件:

Sample Line 1



Sample line 2

Sample line 3

然后输出会将所有多个空行转换为单个空行,因此输出文件如下所示:

Sample Line 1

Sample line 2

Sample line 3

我已经能够使用 sed 命令完成此操作,但问题坚持我使用 awk 以获得此输出。 我得到的最接近的是awk '!x[$0]++',但这只是删除了几乎每个空白行。我觉得我缺少一些基本的东西。

感谢您的帮助!

【问题讨论】:

  • 处理空行时设置变量,看到非空行时取消设置。然后仅在已设置变量时才跳过打印行。

标签: awk


【解决方案1】:
$ awk 'NF{c=1} (c++)<3' file
Sample Line 1

Sample line 2

Sample line 3

或者如果您不介意在末尾多留一个空行:

$ awk -v RS= -v ORS='\n\n' '1' file
Sample Line 1

Sample line 2

Sample line 3

【讨论】:

    【解决方案2】:

    请您尝试关注一下。

    awk '!NF{found++} found>1 && !NF{next} NF{found=""} 1'  Input_file
    

    输出如下。

    Sample Line 1
    
    Sample line 2
    
    Sample line 3
    

    【讨论】:

    • 即使是@Quasímodo 的样本。 ++
    【解决方案3】:

    如果文件在开头或结尾有重复的行,这也有效。

    awk '
    NF==0{
        if (! blank) {print;blank=1}
        next
    }
    {blank=0;print}
    ' file
    

    其操作的基础是 NF 对于每个带有默认 awk 分隔符的空白/空行都为零。


    例如,如果文件是:

    
    
    Sample Line 1
    
    
    
    Sample line 2
    
    Sample line 3
    Sample line 4
    
    
    

    变成了

    
    Sample Line 1
    
    Sample line 2
    
    Sample line 3
    Sample line 4
    
    

    【讨论】:

    • 目前只有一个能正确处理几个前导空行。
    猜你喜欢
    • 2012-05-08
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-21
    • 1970-01-01
    相关资源
    最近更新 更多