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