我有这个输入:
AB1 oo1 FE11 aq
cd7 pp9 xw11 as
md1 Al1 as101 sd
ak5 AB1 aw1 sd
ci6 QB7 cr12 sw
do0 RB1 AB1 sq
并且需要此输出:字段AB1
和1
以及2
3
我试过这个但是有些不对劲:
awk '{ for (i=1;i<NF;i++) { if ($i ~/AB1/) } print $i }' file name
我的代码有什么问题吗?请告诉我,如果你有更好的鳕鱼给我看。
谢谢大家
答案 0 :(得分:3)
您的代码中存在一些语法错误:
awk '{ for (i=1;i<NF;i++) { if ($i ~/AB1/) } print $i }' file name
}
中的结束if ($i ~/AB1/) }
是一个错误,if
需要一个命令,你需要一个结束}
来匹配第一个{
},像这样:
awk '{ for (i=1;i<NF;i++) { if ($i ~/AB1/) print $i }}' file name
更正此语法错误后,输出为:
AB1
AB1
AB1
要打印值为AB1
的字段编号,我会这样写:
$ awk '{ for (i=1; i<NF; ++i) if ($i == "AB1") print i }' file
1
2
3
答案 1 :(得分:0)
更正后的代码行
awk '{ for (i=1;i<NF;i++) { if ($i ~/AB1/) print $i }}' file name
原始
awk '{ for (i=1;i<NF;i++) { if ($i ~/AB1/) } print $i }' file name
问题是括号你把它放在错误的地方
答案 2 :(得分:0)
如果你想要“字段中的字符串:n n n”:
awk -v string="AB1" '
{ if ( maxNF < NF ) { maxNF = NF ; } }
$0~string { we_found_it=1 ;
for (i=1; i<=NF; i++)
{ if ( $i ~ string ) { found_in[i]++ ; }
}
}
END { if ( we_found_it == 1 )
{ printf "%s in the fields: ", string ;
for (i=1; i<=maxNF ; i++)
{ if (found_in[i]>0)
{ printf "%s ", i ;
}
}
}
else
{ printf "%s was NOT found in any fields.", string ;
}
} '
这匹配字段中任何位置的字符串(例如:“... AB1 ...”匹配)
如果您更喜欢完全匹配:
awk -v string="AB1" '
{ if ( maxNF < NF ) { maxNF = NF ; } }
$0~string { for (i=1; i<=NF; i++)
{ if ( $i == string )
{ we_found_it=1 ;
found_in[i]++ ;
}
}
}
END { if ( we_found_it == 1 )
{ printf "%s in the fields: ", string ;
for (i=1; i<=maxNF ; i++)
{ if (found_in[i]>0)
{ printf "%s ", i ;
}
}
}
else
{ printf "%s was NOT found in any fields.", string ;
}
} '
那个完全匹配(即:“AB1”匹配“AB1”,但不是“...... AB1kkk”)