file1の他の列の値と一致する参照ファイルfile2の文字列を出力するfile1に新しい列を追加します。

file1の他の列の値と一致する参照ファイルfile2の文字列を出力するfile1に新しい列を追加します。

file1.txt(タブ区切り、2番目の列にはスペースを含む文字列を含む):

A   Golden fog
B   Vibrant rainbow and sunny
C   Jumping, bold, and bright
D   Chilly/cold/brisk air

file2.txt(タブ区切り):

D01 Ti600   A
D02 Ti500   B
D16 Ti700   C
D20 Ti800   B

file3.txtの目的の出力(タブ区切り文字を含む):

D01 Ti600   A   Golden fog
D02 Ti500   B   Vibrant rainbow and sunny
D16 Ti700   C   Jumping, bold, and bright
D20 Ti800   B   Vibrant rainbow and sunny

または少なくともfile3.txtの場合:

D01 Ti600   Golden fog
D02 Ti500   Vibrant rainbow and sunny
D16 Ti700   Jumping, bold, and bright
D20 Ti800   Vibrant rainbow and sunny

頑張りました

awk 'NR==FNR{a[$1]=$2;next}{$3=a[$1];}1' file1.txt file2.txt > file3.txt

しかし私はちょうど次を得ます:

D01 Ti600 
D02 Ti500 
D16 Ti700 
D20 Ti800 

タブの代わりにスペース区切り文字があり、列2の後にスペースがあり、列3には値がありません。

ご希望の結果をお手伝いいただきありがとうございます。

答え1

ファイルはタブで区切られていますが、実際には使用しません。公開鍵AなどもB次の場所にあります。第三現場でfile2.txt。だから:

$ awk 'BEGIN{OFS=FS="\t"} NR==FNR{a[$1]=$2;next}{$4=a[$3];}1' file1.txt file2.txt
D01 Ti600   A   Golden fog
D02 Ti500   B   Vibrant rainbow and sunny
D16 Ti700   C   Jumping, bold, and bright
D20 Ti800   B   Vibrant rainbow and sunny

または(少し短い)

$ awk -F'\t' 'NR==FNR{a[$1]=$2;next}{print $0"\t"a[$3]}' file1.txt file2.txt
D01 Ti600   A   Golden fog
D02 Ti500   B   Vibrant rainbow and sunny
D16 Ti700   C   Jumping, bold, and bright
D20 Ti800   B   Vibrant rainbow and sunny

関連情報