我有两个带有IP地址的文件作为主键。文件二只有一个具有不同信息的子集。我想使用bash将第二列添加到第一个文件中。
文件1:
192.168.1.1;hosta;aabbccddeef0
192.168.1.2;hostb;aabbccddeef1
192.168.1.3;hostc;aabbccddeef2
file2的:
192.168.1.2;differentHostname;
我在cat file2 | cut -d\; -f1; do grep -w $addr file1 ...
中使用forr的方法不起作用,因为我无法从file2访问主机名。
有什么想法吗?
答案 0 :(得分: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 :(得分: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
>