【发布时间】:2016-05-31 10:27:30
【问题描述】:
我有两个文件在不同的列中都有 ip 地址、mac 和描述的列表。两个文件中都有一些 IP 地址。我想通过 ip 地址加入这些文件,以便输出文件具有: 1)来自两个文件的所有IP地址和 2) 两个文件中列出的任何 IP 后面都有四列 2,每个文件包含 mac 和描述。
文件 1:
11.16.31.13 00:a0:c8:b5:c2:d5 keshav-ae1.0
10.16.31.17 f0:ad:4e:01:c5:c8 keshav-ge-2/1/5.0
108.16.31.3 4c:96:14:5d:5f:f0 keshav-ae0.0
108.16.31.4 00:0a:9c:52:74:b2 keshav-ae1.0
27.16.32.1 00:00:5e:00:01:4c keshav-ae0.0
文件 2:
192.16.31.10 00:25:90:cd:4e:3c keshav-ae0.0
10.16.31.17 f0:ad:4e:01:c5:c8 keshav-ae0.0
17.16.31.2 b0:a8:6e:28:87:f0 keshav-ae0.0
108.16.31.4 00:0a:9c:52:74:b2 keshav-ae0.0
10.16.31.5 2c:36:f8:ce:65:42 keshav-ae0.0
输出文件应为:
11.16.31.13 00:a0:c8:b5:c2:d5 keshav-ae1.0
10.16.31.17 f0:ad:4e:01:c5:c8 keshav-ge-2/1/5.0 f0:ad:4e:01:c5:c8 keshav-ae0.0
108.16.31.3 4c:96:14:5d:5f:f0 keshav-ae0.0
108.16.31.4 00:0a:9c:52:74:b2 keshav-ae1.0 00:0a:9c:52:74:b2 keshav-ae0.0
27.16.32.1 00:00:5e:00:01:4c keshav-ae0.0
192.16.31.10 00:25:90:cd:4e:3c keshav-ae0.0
17.16.31.2 b0:a8:6e:28:87:f0 keshav-ae0.0
10.16.31.5 2c:36:f8:ce:65:42 keshav-ae0.0
我尝试过加入已排序的文件( "sort -n" 或 "sort -n -t . -k 1,1 -k 2,2 -k 3,3 -k 4,4" ),但事实并非如此给出所需的输出。
sort -n file1 > file3
sort -n file2 > file4
join -j 1 -a 1 -a 2 -e UNKNOWN file3 file4 > output
输出文件如下所示:
10.16.31.17 f0:ad:4e:01:c5:c8 keshav-ge-2/1/5.0 f0:ad:4e:01:c5:c8 keshav-ae0.0
10.16.31.5 2c:36:f8:ce:65:42 keshav-ae0.0
11.16.31.13 00:a0:c8:b5:c2:d5 keshav-ae1.0
17.16.31.2 b0:a8:6e:28:87:f0 keshav-ae0.0
108.16.31.4 00:0a:9c:52:74:b2 keshav-ae0.0
192.16.31.10 00:25:90:cd:4e:3c keshav-ae0.0
27.16.32.1 00:00:5e:00:01:4c keshav-ae0.0
108.16.31.3 4c:96:14:5d:5f:f0 keshav-ae0.0
108.16.31.4 00:0a:9c:52:74:b2 keshav-ae1.0
【问题讨论】:
-
awk '{a[$1]=a[$1]" "$2" "$3}END{for (i in a){print i a[i]}}' file1 file2 -
谢谢@anishsane。有用!你能解释一下怎么做吗?