2013-03-06 84 views
1

我有兩個以IP地址作爲主鍵的文件。文件二隻是一個包含不同信息的子集。我想使用bash將第二列添加到第一個文件。通過主鍵合併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 ...不工作,因爲我無法從file2的訪問主機的方式。

任何想法?

回答

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 
+1

呀,這是方法 – Qian 2013-03-06 09:04:51

+1

謝謝,這做到了。 – Stef 2013-03-07 10:02:40

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 
>