2014-07-24 83 views
0

我有一個FILE1.TXT和輸出是:合併兩個文件列在bash

test4 30 
test6 29 
test3 17 
test2 12 
test5 5 

這是文件被second column排序。我用sort -nr -k 2對它進行了整理。

我也FILE2.TXT與內容:

test2 A 
test3 B 
test4 C 
test5 D 
test6 E 

我要爲結果(的Result.txt)是:

test4 C 30 
test6 E 29 
test3 B 17 
test2 A 12 
test5 D 5 
+0

你嘗試過什麼解決辦法嗎? – Jotne

+0

我用'awk'來創建'file1.txt'和'file2.txt'。但我無法創建result.txt。 – MLSC

+0

請參閱此鏈接這可能有助於您的要求。 http://stackoverflow.com/questions/5467690/how-to-merge-two-files-using-awk – Chandru

回答

1

使用awk

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

輸出:

test4 C 30 
test6 E 29 
test3 B 17 
test2 A 12 
test5 D 5 

如果file1尚未排序,你可以這樣做:

sort -nr -k 2 file1 | awk 'FNR == NR { a[$1] = $2; next } { print $1, a[$1], $2 }' file2 - 

或者

awk 'FNR == NR { a[$1] = $2; next } { print $1, a[$1], $2 }' file2 <(sort -nr -k 2 file1) 

有很多方法來格式化輸出。您可以使用column -t

... | column -t 

輸出:

test4 C 30 
test6 E 29 
test3 B 17 
test2 A 12 
test5 D 5 

或者您可以使用printf。雖然我更喜歡使用column -t,因爲如果一列的長度比printf提供的實際大小大,表格將會被破壞。

... { printf "%s%3s%4.2s\n", $1, a[$1], $2 }' ... 

輸出:

test4 C 30 
test6 E 29 
test3 B 17 
test2 A 12 
test5 D 5 
+1

非常感謝... – MLSC

1

不要處理之前的文件進行排序,按第1列進行排序。

假設你有:

file1   file 2 
________________________ 
test2 12  test2 A 
test3 17  test3 B 
test4 30  test4 C 
test5 5  test5 D 
test6 29  test6 E 

使用join file2 file1 | sort -nr -k 3將產生:

test4 C 30 
test6 E 29 
test3 B 17 
test2 A 12 
test5 D 5 

使用-t' '如果你希望你的間距未修改通過加入