次のように曜日を一覧表示する配列のデータを一致させようとします。
MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
SUNDAY
ファイルデータは次のとおりです。
Name1,Tuesday
Name2,Friday
Name3,Sunday
Name4,Wednesday
Name5,Thursday
Name6,Saturday
出力は次のようになります。
MONDAY
TUESDAY Name1
WEDNESDAY Name4
THURSDAY Name5
FRIDAY Name2
SATURDAY Name6
SUNDAY Name3
カンマを使用してデータを2つの部分に分割できます。ファイルのデータを配列のデータと一致させることができるかどうか疑問に思います。
答え1
file1 に曜日が含まれ、file2 に日付と名前が含まれている場合は、次のようになります。
$ awk -F, 'FNR==NR{a[toupper($2)]=$1;next} {print $1,a[$1]}' file2 file1
MONDAY
TUESDAY Name1
WEDNESDAY Name4
THURSDAY Name5
FRIDAY Name2
SATURDAY Name6
どのように動作しますか?
-F,
フィールド区切り記号としてカンマを使用します。
FNR==NR{a[toupper($2)]=$1;next}
最初の名前付きファイルfile2を読み取ると、
a
キーが日付の大文字バージョンで値が名前である連想配列にエントリが追加されます。その後、残りのコマンドをスキップしてその行にnext
移動します。print $1,a[$1]
ここに到着したら、2番目のファイルを扱っています。この場合、連想配列で検索した日付と名前を印刷します
a
。