使用 awk 查找数字 FN

使用 awk 查找数字 FN

我有一个文档,该文档有几列,如下所示:

,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,因此剩下的字段数就是搜索模式的字段号。

相关内容