次の列が複数ある文書があります。
,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
のフィールド数は検索パターンのフィールド番号です。