1

我有两个以 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;

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

有任何想法吗?

4

2 回答 2

8

这是做什么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
于 2013-03-06T09:01:55.310 回答
0
awk -F";" -v OFS=";" 'FNR==NR{a[$1]=$2;next}($1 in a){$(NF+1)=a[$1]}1' file2 file1

测试:

> awk -F";" -v OFS=";" 'FNR==NR{a[$1]=$2;next}($1 in a){$(NF+1)=a[$1]}1' temp2 temp
192.168.1.1;hosta;aabbccddeef0
192.168.1.2;hostb;aabbccddeef1;differentHostname
192.168.1.3;hostc;aabbccddeef2
> 
于 2013-03-06T09:25:19.040 回答