awk は file1 から同じフィールド値を取得し、file2 に設定します。

awk は file1 から同じフィールド値を取得し、file2 に設定します。

ファイル1(親)

2210 1110 Earth
2211 1111 Marse
2212 1112 Saturn
2213 1113 Pluto

ファイル2(サブ)

3310 2210 Earth
3311 2210 Space
3312 2211 Mars
3313 2211 Space
3314 2212 Saturn
3315 2212 Space
3316 2213 Pluto
3317 2213 Space

予想される

3310 2210 Earth
3311 2210 Earth
3312 2211 Mars
3313 2211 Mars
3314 2212 Saturn
3315 2212 Saturn
3316 2213 Pluto
3317 2213 Pluto

したがって、ファイル 2 の $2 をファイル 1 の $1 と比較し、ファイル 2 の $3 値をファイル 2 の $3 と同じに設定する必要があります。

答え1

$ awk 'FNR==NR {planet[$1]=$3; next} {$3=planet[$2]; print}' file1 file2
3310 2210 Earth
3311 2210 Earth
3312 2211 Marse
3313 2211 Marse
3314 2212 Saturn
3315 2212 Saturn
3316 2213 Pluto
3317 2213 Pluto
  • FNR==NR「最初のファイルを解析するとき」を意味する慣用語ですawknext最初のファイルの残りのコードが実行されないようにするには、この条件の操作を終了する必要があります。

  • 惑星フィールドはハッシュ配列に格納され、2番目のファイルを読み取るときに最後のフィールドに割り当てます。

答え2

ファイルがすべて結合フィールド(の最初のフィールドfile1との2番目のフィールドfile2)のアルファベット順にソートされているとします。

$ join -1 1 -2 2 -o 2.1,2.2,1.3 file1 file2
3310 2210 Earth
3311 2210 Earth
3312 2211 Marse
3313 2211 Marse
3314 2212 Saturn
3315 2212 Saturn
3316 2213 Pluto
3317 2213 Pluto

-1 1 -2 2最初のファイルの最初のフィールドと2番目のファイルの2番目のフィールド()を使用して、2つのファイル間のリレーショナルJOIN操作を実行します。出力はoptionsを使用して指定されます-o。上記のコマンドは、2.1,2.2,1.32 番目のファイルの 1 番目と 2 番目のフィールドを提供し、その後に最初のファイルの 3 番目のフィールドを提供します。

関連情報