Você poderia fazer como abaixo,
awk -F, '{for(i=1;i<=NF;i++)if($i=="Flag10")print i}' file
Exemplo:
$ echo ',Flag2,,Flag4,Flag5,,,,,Flag10,Flag11,Flag12,Flag13' | awk -F, '{for(i=1;i<=NF;i++)if($i=="Flag10")print i}'
10
Eu tenho um documento, e este documento tem várias colunas, como esta:
,Flag2,,Flag4,Flag5,,,,,Flag10,Flag11,Flag12,Flag13
Se eu usar o awk para saber o número total de campos, saber que o caractere separador é ,
o resultado é: 13
Agora, quero obter o número do campo para Flag10, o resultado deve ser: 10
Como posso fazer isso com o awk?
Para usar awk
incorporado:
awk -F, -v field="Flag10" '{sub(field",.*",field);print split($0,any)}' doc.file
O script removerá tudo após a primeira ocorrência do valor de field
(nesse caso, Flag10
) e, em seguida, imprimirá o resultado da divisão da linha em vírgulas. Como excluímos tudo depois de Flag10
, isso resulta no número de campos restantes, que é o número do campo do padrão de pesquisa.
Eu normalmente crio um array associativo, mapeando os nomes dos cabeçalhos para os números das colunas
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
Tags text-processing awk