awkを使って数字FNを見つけます。

awkを使って数字FNを見つけます。

次の列が複数ある文書があります。

,Flag2,,Flag4,Flag5,,,,,Flag10,Flag11,Flag12,Flag13

awkを使用してフィールドの総数と区切り文字を確認すると、,結果は次のようになります。

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のフィールド数は検索パターンのフィールド番号です。

関連情報