【问题标题】:Awk pattern matching on rows that have a value at specific column. No delimiter对在特定列具有值的行进行 awk 模式匹配。无分隔符
【发布时间】:2017-08-08 07:00:50
【问题描述】:

我想使用 awk 搜索文件以输出具有从特定列号开始的值的行。例如

我从第 10 列开始寻找 979719:

moobaaraa**979719**
moobaaraa123456
moo**979719**123456
moobaaraa**979719**
moobaaraa123456

如您所见,没有分隔符。它是一个原始数据文本文件。我想输出第 1 行和第 4 行。不是第 3 行,它包含模式但不在所需的列号处。

【问题讨论】:

  • 这必须通过awk 完成,或者是否欢迎任何方法?

标签: awk


【解决方案1】:
awk '/979719$/' file

moobaaraa979719
moobaaraa979719

【讨论】:

  • 大苹果!轻松愉快!
【解决方案2】:

一个简单的sed 方法。

$ cat file
moobaaraa979719
moobaaraa123456
moo979719123456
moobaaraa979719
moobaaraa123456

只需搜索一个模式,以979719 结尾并打印该行:

$ sed -n '/^.*979719$/p' file
moobaaraa979719
moobaaraa979719

【讨论】:

    【解决方案3】:

    此代码有效:

    awk 'length($1) == 9' FS="979719" raw-text-file
    

    此代码将 979719 设置为字段分隔符,并检查第一个字段的长度是否为 9 个字符。然后打印该行(作为默认操作)。

    【讨论】:

      【解决方案4】:
      awk 'substr($0,10,6) == 979719' file
      

      如果您想从第 10 个字符搜索到每行的末尾,可以删除 ,6

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多