获取与awk中的单词匹配的列

时间:2019-07-12 09:46:32

标签: shell awk

我想使用awk来获取一个Excel文件的列,其中的列名是注释。例如我有

data number annotation.1.2
1     2      where can I go
4     5      where can I see this flim
6     7      I want to see this movie.

awk '$3 ~ /annotation/ { print }' toto

如果第三列是注释,则我的代码有效,但是我还有其他一些文件,其中注释位于第五列的第四列。有什么办法可以只给注解1.3吗?

使用以下代码,我只收到 film can where

1 个答案:

答案 0 :(得分:3)

编辑: 由于OP更改了要求,并告知Input_file为TAB分隔,并且注释字段的长度不固定,因此现在添加以下解决方案。

awk '
BEGIN{
  FS="\t"
}
FNR==1{
  for(i=1;i<=NF;i++){
    if($i~/annotation/){
       val=i
       next
    }
  }
}
match($val,/[^\t]*/){
  print substr($val,RSTART,RLENGTH)
}
'  Input_file


请您尝试以下操作(已按照OP的示例进行了编写和测试)。

awk 'FNR==1{for(i=1;i<=NF;i++){if($i=="annotation"){val=i;next}}} {print $val}' Input_file

如果您有不同的分隔符(如TAB),则在上面的代码中将awk更改为awk -v FS="\t"