一尘不染

通过主键与bash合并文件

linux

我有两个文件,其中IP地址为主键。文件二只有一个包含不同信息的子集。我想使用bash将第二列添加到第一个文件。

文件1:

192.168.1.1;hosta;aabbccddeef0
192.168.1.2;hostb;aabbccddeef1
192.168.1.3;hostc;aabbccddeef2

文件2:

192.168.1.2;differentHostname;

cat file2 | cut -d\; -f1; do grep -w $addr file1 ...无法使用for
addr的方法,因为无法从file2访问主机名。

有任何想法吗?


阅读 216

收藏
2020-06-07

共1个答案

一尘不染

这是做什么的join

$ join -a1 -t';' <(sort file1) <(sort file2)    
192.168.1.1;hosta;aabbccddeef0
192.168.1.2;hostb,aabbccddeef1;differentHostname;
192.168.1.3;hostc,aabbccddeef2

注意:join要求文件按排序顺序。

您可以使用以下-o选项指定输出顺序:

$ join -a1 -t';' -o 1.1 1.2 2.2 1.3 <(sort file1) <(sort file2)
192.168.1.1;hosta;;aabbccddeef0
192.168.1.2;hostb;differentHostname;aabbccddeef1
192.168.1.3;hostc;;aabbccddeef2
2020-06-07