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

标签 perl sed awk

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

我尝试在两个文件之间进行基本模式匹配,仅针对两行中包含的服务器,并将两个文件中的行中的数据打印在第三个文件的一行上。

文件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

最佳答案

这应该可以解决问题:

$ 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

关于perl - 查找两个文件之间第一列的匹配模式,并在第三个文件中打印每个文件中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16214521/

相关文章:

regex - 负前瞻正则表达式

bash - 使用 sed 替换动态生成的字符串

linux - RRDTool GPRINT 格式与 printf

bash - 匹配两个文件第一列中的值并将匹配行加入新文件中

database - 我如何从 Yahoo! 获取和比较股票报价?和谷歌?

perl - 为什么 Perl `printf` 会改变我的 $variable 的值?

linux - 如何在文本中搜索多行模式并获得最后一次出现?

csv - 使用awk有效解析CSV的最健壮方法是什么?

perl - 使用 STDIN/STDOUT 作为套接字

linux - sed 正则表达式不贪心?