在 file1 中添加一个新列,该列在参考文件 file2 中输出与 file1 中另一列的值匹配的字符串

在 file1 中添加一个新列,该列在参考文件 file2 中输出与 file1 中另一列的值匹配的字符串

file1.txt(制表符分隔符,第二列包含带空格的字符串):

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

尽管您注意到文件是制表符分隔的,但您实际上并没有使用它。公共密钥AB也位于第三现场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

相关内容