別のファイルの異なる列値を使用して1列の値を変更する方法

別のファイルの異なる列値を使用して1列の値を変更する方法

Unixでどのコマンドを使うべきかわかりません。

次のようなファイルがあるとしましょう。

A  23
B  52
C  36
F  25

2番目のファイルには3つの列があります。

A  aligator  2
B  panda  3
C  bear  4
D  pig  1
E  yeti  0
F  shark  9
G  dog  10
H  cat  1

最初の列の値がファイル間で一致する場合は、最初の列の値(1つのファイル)を2番目の列の値(2つのファイル)に置き換えたいと思います。

出力例:

aligator  23
panda  52
bear  36
shark  25

誰が私を助けることができますか?

最高。

答え1

ファイルがソートされたら、joincoreutilsを使用できます。

join -o '2.2 1.2' file1 file2

出力:

aligator 23
panda 52
bear 36
shark 25

答え2

awk仕事のための素晴らしいツールは次のとおりです。

awk 'NR==FNR{a[$1]=$2;next}a[$1]{print $2,a[$1]}' file1 file2

最初のファイルを読み取ると(FN==FNR)、a配列は2番目の列の値で埋められ、最初の列からインデックス付けされます。次に、2番目のファイルが処理されると、file1の2番目の列と2番目の列が印刷されます。

出力:

aligator 23
panda 52
bear 36
shark 25

関連情報