2016-07-08 100 views
1

我有兩個文件看起來像這樣:猛砸加入過多個領域

文件1

a b 1 1 
b d 2 3 

文件2

a 10 11 
b 20 21 
d 30 31 

而且我想加入他們的行列,以具有以下輸出,這是頭兩個字段中第一個用file2寫入的文件:

a b 1 1 10 11 20 21 
b d 2 3 20 21 30 31 

我試圖使用連接,但我無法管理根據file1的前兩個字段加入文件。

+0

回答幾百次,用awk。 – 123

+0

沒有辦法只用於連接嗎? – pauloss

+0

不是我知道沒有。 – 123

回答

3

既然你想加入兩行,你需要參加兩次,管道第一的標準輸出到第二的標準輸入:

join -11 -21 file1 file2 | join -12 -21 - file2 

編輯:啊拍,是顛倒了順序前兩個字段,是嗎?

b a 1 1 10 11 20 21 
d b 2 3 20 21 30 31 

編輯2:這可能是更好的 - 如果你顛倒順序的加入,你會得到第一個兩列按照正確的順序,但聯接的列將被交換:

join -12 -21 file1 file2 | join -12 -21 - file2 

產量:

a b 1 1 20 21 10 11 
b d 2 3 30 31 20 21 

嘿好,我認爲我們得到了它 - 編輯3與邁克爾Vehrs建議:

join -11 -21 file1 file2 | join -o "1.1 1.2 1.3 1.4 1.5 1.6 2.2 2.3" -12 -21 - file2 

產量:

a b 1 1 10 11 20 21 
b d 2 3 20 21 30 31 
+0

我真的想保持訂單。 我有這個'加入-11 -21 t1 t2 |加入-12 -21-t2 | awk「{print $ 2」「$ 1」「$ 3」「$ 4」「$ 5」「$ 6」「$ 7」「$ 8}」'但我覺得有更好的選擇。 – pauloss

+0

你的第二次編輯會顛倒a和b的值,而不是a和b。 – pauloss

+1

這很笨拙,但是你可以用'-o'選項來修正字段的順序,至少在GNU'join'的時候。 –