我想使用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
答案 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"
。