2016-08-12 86 views
1

我有一个关于合并2个数据文件的问题。第一个文件包含每个服务器名称的IP地址。第二个包含一个数据项和相关的IP地址。使用Linux命令合并和比较文件

对于输出,我想要输入第二个文件,但映射的服务器名称在第一个文件中查找。

File_1:

10.1.1.1 server_1 
10.1.1.2 server_2 
10.1.1.3 server_3 

File_2:

2 10.1.1.3 
4 10.1.1.1 

我需要为让下面的输出想出一个命令:

OUTPUT_FILE:

2 10.1.1.3 server_3 
4 10.1.1.1 server_1 
+0

涉及的最大文件大小是多少? –

+1

你有什么考虑? 'join'命令(和'sort'命令,可能是[进程替换](https://www.gnu.org/software/bash/manual/bash.html#Process-Substitution))有帮助吗?或者你可以使用'awk';或者你可以使用Perl或Python或... –

+0

我觉得在格式化的东西丢失。你正在尝试做的事情听起来并不困难,但我根本无法告诉你想要什么。 – willpnw

回答

1

你可以使用awk:

awk 'FNR==NR{a[$1]=$2; next} $2 in a{print $0, a[$2]}' file1 file2 

2 10.1.1.3 server_3 
4 10.1.1.1 server_1 
1
join -1 1 -2 2 -o 2.1,0,1.2 <(sort -k1 File_1) <(sort -k2 File_2) 

输出:

4 10.1.1.1 server_1 
2 10.1.1.3 server_3 

加入上文件1,文件2的第二场,输出文件2,接合场的第一场的第一场和第二文件1的字段;将sort -k1 File_1的输出和sort -k2 File_2的输出作为输入文件。

如果您需要按第一列中的数值排序的输出,请输入sort -k1n(或sort -n)。

+0

感谢Jonathan对你的支持,因为你提到的命令非常有帮助 – user3595099