如何使用不同文件中另一列的值更改一列的值

如何使用不同文件中另一列的值更改一列的值

我不知道在 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

如果文件已排序,您可以使用joincoreutils:

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

相关内容