![如何使用不同文件中另一列的值更改一列的值](https://linux22.com/image/134611/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E4%B8%8D%E5%90%8C%E6%96%87%E4%BB%B6%E4%B8%AD%E5%8F%A6%E4%B8%80%E5%88%97%E7%9A%84%E5%80%BC%E6%9B%B4%E6%94%B9%E4%B8%80%E5%88%97%E7%9A%84%E5%80%BC.png)
我不知道在 unix 中应该使用什么命令。
假设我有一个这样的文件:
A 23
B 52
C 36
F 25
第二个文件有 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
现在,如果第一列的值在文件之间匹配,我想使用第二列值(2 个文件)替换第一列值(在 1 个文件中)
输出示例:
aligator 23
panda 52
bear 36
shark 25
谁能帮我?
最好的。
答案1
如果文件已排序,您可以使用join
coreutils:
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
用第二列中的值填充数组并从第一列开始索引。然后,当处理第二个文件时,打印其第二列和 file1 中的第二列。
输出:
aligator 23
panda 52
bear 36
shark 25