Ubuntu 命令行列出字段长度#4不等于3的记录行号

Ubuntu 命令行列出字段长度#4不等于3的记录行号,ubuntu,command-line,Ubuntu,Command Line,是否可以在一个命令行中列出字段长度#4不等于3的记录行号 假设我有这个数据(制表符分隔符) #4字段中的数据为ATG、GGTA、GGT、TT、GTAA。 所以输出应该是 2 4 5 或(NULL可以被任何内容替换) 我更喜欢第一个输出。第二种方法是为了防止第一次输出无法完成,请尝试以下方法: $ awk -F'\t' '{print $4}' input.txt | cat -n | grep -Ev '[[:space:]][CTAG][CTAG][CTAG]$' | awk '{

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

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

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

2
4
5
或(NULL可以被任何内容替换)

我更喜欢第一个输出。第二种方法是为了防止第一次输出无法完成,请尝试以下方法:

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

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

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

  • -a
    自动分割输入的每一行
  • -F
    (与@holygeek的awk解决方案类似)允许定义拆分模式
  • 可以在数组
    @F
  • $。
    是一个变量,包含输入的当前行号
$ awk -F'\t' '{print $4}' input.txt | cat -n |
  grep -Ev '[[:space:]][CTAG][CTAG][CTAG]$' | 
  awk '{print $1}'
perl  -F'\t' -lane 'length($F[3])==3 or print $.' input.txt