【问题标题】:command line to list the line number of the records that the length of field #4 not equal to 3命令行列出字段#4长度不等于3的记录的行号
【发布时间】:2012-03-08 08:56:06
【问题描述】:

是否可以在一个命令行中列出field#4长度不等于3的记录的行号?

假设我有这个数据(制表符分隔符)

John Smith  25  O   ATG 180
Peter Jackson   40  AB  GGTA    173
Carl Anderson   32  A   GGT 172
Michael Phillips    28  B   TT  165
Lisa Mount  30  B   GTAA    168

这里的字段#4 中的数据是 ATG、GGTA、GGT、TT、GTAA。 所以输出应该是

2
4
5

或者(NULL可以被任何东西代替)

NULL 
2
4
NULL
5

我更喜欢第一个输出。第二个是为了以防第一个输出是不可能的

【问题讨论】:

    标签: ubuntu command-line


    【解决方案1】:

    试试这个:

    $ awk -F'\t' '{print $4}' input.txt | cat -n |
      grep -Ev '[[:space:]][CTAG][CTAG][CTAG]$' | 
      awk '{print $1}'
    

    【讨论】:

      【解决方案2】:

      另一种解决方案,但在 Perl 中:

      perl  -F'\t' -lane 'length($F[3])==3 or print $.' input.txt
      

      快速解释:

      • -a 自动拆分输入的每一行
      • -F(就像在 @holygeek 的 awk 解决方案中一样)允许定义拆分模式
      • 可以在数组@F中访问拆分的结果
      • $. 是一个变量,包含输入的当前行号

      【讨论】:

        猜你喜欢
        • 2017-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多