2016-08-12 87 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