Sort
加入兩個文件,每個文件有兩列,包括不匹配的行
我正在嘗試匹配和合併兩組排序數據,每個文件一組。每個文件包含兩列:鍵欄位和關聯的值。結果輸出應包含三列:鍵欄位、第一個文件中的值(如果有)和第二個文件中的值(如果有)。我需要包含不匹配的數據行。
第一個文件“約翰”
apple,green cherry,red orange,orange
第二個文件“簡”
apple,red banana,yellow cherry,yellow kiwi,green
期望的結果
apple,green,red banana,,yellow cherry,red,yellow kiwi,,green orange,orange,
我最初認為這是一項微不足道的工作
join
LC_ALL=C join -j1 -a1 -a2 -t',' john jane
但是結果
-a1 -a2
總是將不匹配的值放在第二列中:apple,green,red banana,yellow cherry,red,yellow kiwi,green orange,orange
我需要能夠看到不匹配的值來自哪個源文件,理想情況下是通過將這些值放在結果文件的適當第二列或第三列中,但我無法找到一種簡單的方法來實現這一點,而無需深入到
awk ... getline()
類型構造中。請問有什麼建議嗎?
你想要
-o auto
:join -t, -j 1 -a 1 -a 2 -o auto john jane
來自
man join
:
**-o** *FORMAT*
*
FORMAT
*在建構輸出線時 服從︙
如果*
FORMAT
*是關鍵字’auto
’,那麼每個文件的第一行決定了每行輸出的欄位數。或者從GNU Coreutils 更好地解釋:join invocation (按照連結進入join 中的 General 選項):
’
-o auto
'如果指定了關鍵字“
auto
”,則從每個文件的第一行推斷輸出格式。這與預設輸出格式相同,但也確保每行輸出相同數量的欄位。缺少的欄位被替換為-e
選項,多餘的欄位被丟棄。% cat john apple,green cherry,red orange,orange % cat jane apple,red banana,yellow cherry,yellow kiwi,green % join -t, -j 1 -a 1 -a 2 -o auto john jane apple,green,red banana,,yellow cherry,red,yellow kiwi,,green orange,orange,