【问题标题】:How can I remove lines in which length of a field exceeds some threshold using awk or sed?如何使用 awk 或 sed 删除字段长度超过某个阈值的行?
【发布时间】:2013-07-08 17:17:15
【问题描述】:

我有类似的文件 test.txt

aa:bbbbbb:22.3
a:bb:33.2
a:bbbb:22.3
aaaa:bb:39.9


我知道如何对它们进行计数和排序:

awk -F ':' '{print $2}' test.txt | awk '{print length($0),$0}' | sort -nr


现在我想从文件中删除第 1 行和第 3 行,因为这些行中第二个字段(包含“b”)的长度大于 3。如何使用 awk/sed 来做到这一点?谢谢。

【问题讨论】:

    标签: sed awk


    【解决方案1】:

    awk:

    这将输出第二个字段>3的行:

    $ awk -F: 'length($2)>3' file
    aa:bbbbbb:22.3
    a:bbbb:22.3
    

    反之:

    $ awk -F: 'length($2)<=3' file
    a:bb:33.2
    aaaa:bb:39.9
    

    【讨论】:

    • 非常感谢,它是如此简单。我在提取命令后对恢复行的问题过于认真!
    • 谢谢@Kent ;) 我实际上正在考虑将这个标志图片永久化哈哈
    【解决方案2】:

    的代码:

    sed '/.*:..:.*/!d' file
    

    或更笼统地说:

    sed '/.*:.\{2\}:.*/!d' file
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-05
      • 1970-01-01
      • 1970-01-01
      • 2013-01-07
      • 2016-12-11
      相关资源
      最近更新 更多