【问题标题】:How to write a unix filter that outputs only a line every N lines如何编写一个每 N 行只输出一行的 unix 过滤器
【发布时间】:2010-09-26 06:02:06
【问题描述】:

假设使用以下行来提供过滤器标准输入:

line 1 
line 2
line 3
line 4 
line 5
line 6
line 7
line 8
line 9
line 10

如果有人告诉我如何编写一个仅每 4 行打印一次的脚本,那就更好了,以上面的示例输入为例:

line 1
line 5
line 9

【问题讨论】:

    标签: unix shell scripting awk


    【解决方案1】:
    $ yes | cat -n | head -10 | awk 'NR % 4 == 1'
         1  y
         5  y
         9  y
    

    也就是说,你的答案是“awk 'NR % 4 == 1'”。

    【讨论】:

    • 令人耳目一新的是,有人知道 awk 中的默认操作。
    【解决方案2】:
    awk '{ if ((NR-1) %4 ==0) print}'
    

    【讨论】:

      【解决方案3】:
      awk 'NR%4 == 1 {print}'</etc/hosts
      

      当然,用你想要的任何值替换 4。

      【讨论】:

        【解决方案4】:
        sed -ne '1~4p’
        

        (GNU sed。未在 OSX 等上测试)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-08
          • 1970-01-01
          • 2020-07-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多