使用Linux命令合并和比较文件
问题描述:
我有一个关于合并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
答
你可以使用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
答
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
涉及的最大文件大小是多少? –
你有什么考虑? 'join'命令(和'sort'命令,可能是[进程替换](https://www.gnu.org/software/bash/manual/bash.html#Process-Substitution))有帮助吗?或者你可以使用'awk';或者你可以使用Perl或Python或... –
我觉得在格式化的东西丢失。你正在尝试做的事情听起来并不困难,但我根本无法告诉你想要什么。 – willpnw