文件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
是一个awk
习语,意思是“解析第一个文件时”。有必要结束此条件的操作,以next
避免运行第一个文件的剩余代码。行星字段存储在哈希数组中,在读取第二个文件期间,我们将其分配给最后一个字段。
答案2
假设文件都在连接字段上按字典顺序排序( 中的第一个字段file1
和 中的第二个字段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
这使用第一个文件的第一个字段和第二个文件的第二个字段 ( )在两个文件之间执行关系 JOIN 操作。输出是使用选项指定的-o
,在上面的命令中,2.1,2.2,1.3
为我们提供了第二个文件中的第一个和第二个字段,后面是第一个文件中的第三个字段。