配列のデータをファイルのデータと一致させますか?

配列のデータをファイルのデータと一致させますか?

次のように曜日を一覧表示する配列のデータを一致させようとします。

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

関連情報