2009-06-12 58 views
13

我有兩個文件,我想基於第一列執行UNION操作 :填充空字段加入操作

FILE1.TXT

foo 1 
bar 2 
qux 3 

FILE2.TXT

foo x 
qux y 
boo z 

我希望得到的結果是這樣的:

foo 1 x 
bar 2 - 
qux 3 y 
boo - z 

其中列1的空字段用「 - 」填充 。

但是,爲什麼這個連接命令不能像我預期的那樣工作?

$ join -a1 -a2 -e"-" file1.txt file2.txt 

什麼是正確的做法?

回答

21

「重要提示:FILE1和FILE2必須在連接字段上排序。」 (從this在線手冊頁)。

這個問題#1。問題2更糟糕的是:選項-e被嚴重記錄 - 只能結合-o,因此,例如:

$ join -a 1 -a 2 -e'-' -o '0,1.2,2.2' sfile1.txt sfile2.txt 
bar 2 - 
boo - z 
foo 1 x 
qux 3 y 

其中s前綴名,指示我已經sort事先編輯的文件。

編輯:man join解釋了-o開關(我在上面指出的在線手冊頁)。它指定要輸出的字段(1.2表示來自文件1的第二個字段,& c),或0表示連接字段,並且是一個以逗號分隔的列表。 (我實際上並不記得0值,所以最初給出了一個需要awk後期處理的笨拙解決方案,但目前的解決方案更好......並且不需要awk!)。

+0

@Alex:非常感謝。我不明白選項「-o'1.1,2.1,1.2,2.2'」。我在哪裏可以找到有關此信息?另外如果你不介意awk請嗎? – neversaint 2009-06-12 07:14:24

2

-e只適用於-o

join -a 1 -a 2 -e"-" -o auto file1.txt file2.txt