我有一个文档,该文档有几列,如下所示:
,Flag2,,Flag4,Flag5,,,,,Flag10,Flag11,Flag12,Flag13
如果我用awk知道字段总数,知道分隔符的话,
结果是:13
现在,我想获取Flag10的字段编号,结果应该是:10
我怎样才能用 awk 做到这一点?
答案1
你可以像下面这样做,
awk -F, '{for(i=1;i<=NF;i++)if($i=="Flag10")print i}' file
例子:
$ echo ',Flag2,,Flag4,Flag5,,,,,Flag10,Flag11,Flag12,Flag13' | awk -F, '{for(i=1;i<=NF;i++)if($i=="Flag10")print i}'
10
答案2
我通常创建一个关联数组,将标题名称映射到列号
awk -F, -v head="Flag10" '
FNR == 1 {for (i=1; i<=NF; i++) col[$i] = i}
{print $col[head]}
' << END
,Flag2,,Flag4,Flag5,,,,,Flag10,Flag11,Flag12,Flag13
10,20,30,40,50,60,70,80,90,100,110,120,130
END
Flag10
100
答案3
要使用awk
内置的:
awk -F, -v field="Flag10" '{sub(field",.*",field);print split($0,any)}' doc.file
该脚本将删除第一次出现值field
(在本例中为Flag10
)之后的所有内容,然后打印以逗号分隔行的结果。由于我们已经删除了之后的所有内容Flag10
,因此剩下的字段数就是搜索模式的字段号。