【问题标题】:Remove lines with more than x digits [closed]删除多于 x 位的行 [关闭]
【发布时间】:2019-10-19 06:38:23
【问题描述】:

我想找到一种使用 awk 或 sed 删除包含超过 4 位数字的行的方法:

输入:

test12test1
test154test43test
test12

想要的输出:

test12test1
test12

我该如何解决这个问题?

【问题讨论】:

  • [0-9].*[0-9].*[0-9].*[0-9].*[0-9] 匹配至少 5 位数字的行。
  • 感谢 Barmar,它正在工作

标签: regex perl awk sed word-list


【解决方案1】:

其中一个可能会。

awk -F '[0-9]' 'NF<=5' file
test12test1
test12

awk -F '[0-9]' 'NF<6' file
test12test1
test12

将字段分隔符设置为任何可能的十进制数字,然后对字段总数执行测试。
由于您在字段分隔符之前和之后获得了一个字段,因此您需要测试该行是否超过 5 个字段以确定该行是否有超过 4 个小数。

【讨论】:

    【解决方案2】:

    这可能对你有用(GNU sed):

    sed 's/[0-9]/&/4;T;d' file
    

    如果可以替换第 4 位,则删除该行。

    【讨论】:

      【解决方案3】:

      perl tr/// 操作符返回 number 个替换,所以

      perl -ne 'print if tr/0-9/0-9/ <= 4' file
      

      或者如果你想使用 shell 变量

      max_digits=4
      perl -sne 'print unless tr/0-9/0-9/ > $max' -- -max=$max_digits file
      

      【讨论】:

        猜你喜欢
        • 2013-02-21
        • 1970-01-01
        • 2021-04-20
        • 2015-05-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多