在两个文件之间查找第一列的匹配模式,并在第三个文件中打印每个文件的行

时间:2013-04-25 12:16:58

标签: perl sed awk

我有两个文件,一个包含服务器名称和IP,另一个包含服务器名称和机器名称,例如。这些文件没有实际的顺序。我尝试过使用Sort,awk和sed的变体。但第一个文件维护得不是很好,并且包含伪造的数据,这些数据抵消了我计划如何做的事情。

我尝试在两个文件中基本上只对两个文件中包含的服务器进行模式匹配,并在thrid文件中的一行上打印两个文件中的行的数据。

文件1:

Server1 10.10.10.1
Server2 10.10.10.2
....
Server154 10.10.30.8
Server155 10.10.30.9

文件2:

Server1 site site1
Server2 site site2
....
Server154 site site154
Server155 site site155

输出:

Server1 10.10.10.1 site site1
Server2 10.10.10.2 site site2
...
Server154 10.10.30.8 site site154
Server155 10.10.30.9 site site155

2 个答案:

答案 0 :(得分:3)

这应该可以解决问题:

$ awk 'FNR==NR{a[$1]=$0;next}($1 in a){print a[$1],$2,$3}' file1 file2
Server1 10.10.10.1 site site1
Server2 10.10.10.2 site site2
Server154 10.10.30.8 site site154
Server155 10.10.30.9 site site155

答案 1 :(得分:-1)

可以通过使用BEGIN中的第一个文件填充数组,然后再次匹配该数组的第二个文件来解决。

awk -v f1="file1.txt" 'BEGIN { while (getline < f1) { keys[$1]=$2 } ; close(f1) }
   keys[$1] { print }' file2.txt