【问题标题】:delete nth of lines using awk使用 awk 删除第 n 行
【发布时间】:2012-12-22 05:41:22
【问题描述】:

在设定的记录间隔内,我需要删除 4 行/记录。这可以用 awk 或 sed 完成吗?

我有一个文件,每 70 条记录就有一个换页符。这导致在我的输出中打印一个空行。

我想使用 awk 或 sed 删除换页前的四 (4) 行,因此我的页面现在有 66 行长。

这应该消除我的空白页。

我传递的文件是一个假脱机文件中的数千条记录,我希望有一个简单的解决方案。我试过了

sed -n -e '65~68p; 

但我认为我的 unix 机器上没有该功能,因为当我尝试运行该命令时出现错误。

【问题讨论】:

    标签: unix sed awk


    【解决方案1】:
    awk '{if ((NR%70) <65) print $0;}' inputfile
    

    应该做的工作。

    【讨论】:

    • @TomBell,现在的礼节是通过接受它来奖励正确的答案——见meta.stackexchange.com/a/5235
    • awk '(NR%70) &lt;65' inputfile
    • 我需要更多帮助。我不太明白语法。我了解 NR%70 的工作原理,但是之后添加
    • nr%70 给出 n 模 70 的结果,即 0..69,具体取决于实际记录数。然后检查它是否小于 65 。如果这是真的,则执行语句 (print $0)。所以没有删除任何行,只是处理了输入文件,这个程序的输出不包含第 66-70 行。然后,您可以将此输出存储在另一个文件中,而不是使用 awk '{if ((NR%70) &lt;65) print $0;}' inputfile&gt;anotherfile 在终端中显示它
    【解决方案2】:

    pbhd 在我发布之前给出了一个很好的解决方案,但如果你想使用 python 来做的话:

        import sys
        s = sys.stdin.read()
        for page in s.split('\f'):
            lines = page.splitlines()
            print '\n'.join(lines[:-4]) + '\f'
    

    【讨论】:

      【解决方案3】:
      sed 'H;g;s:[^\n]::g;/.\{64\}/{N;N;N;s:.::g; x;s:\n::p;d};${x;s:\n::;p};d' FILE
      

      此行将删除第 65, 65*2, ..., 65*K 行之后的接下来的 3 行。

      如果要删除多于 3 行,请添加更多 N;N;N;。

      【讨论】:

      • 这不会只删除我文件的第三行和第四行吗?我需要它来删除整个文件中的行。例如,我需要删除 67、68 和 69 行,然后再读取 67 行后,再删除 3 行。
      猜你喜欢
      • 2015-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多