Files
加入:兩個文件 - 但只附加最後兩列
給定文件:
1.txt
1, abc, 123, 456, 789 2, lmn, 123, 456, 789 3, pqr, 123, 456, 789
2.txt
1, abc, 123, 000, 000 3, lmn, 123, 000, 000 9, opq, 123, 000, 000
輸出.txt
ID, NAME, X, 1A, 1B, 2A, 2B 1, abc, 123, 456, 789, 000, 000 2, lmn, 123, 456, 789, MISSING, MISSING 3, pqr, 123, 456, 789, 000, 000 9, opq, 123, MISSING, MISSING, 000, 000
我用這個作為參考。
我嘗試使用以下內容:
join -t , -a1 -a2 -1 1 -2 1 -o 0 -o 1.2 -o 1.3 -o 1.4 -o 1.5 -o 2.4 -o 2.5 -e "MISSING" 1.txt 2.txt
產生:
1, abc, 123, 456, 789, 000, 000 2, lmn, 123, 456, 789,MISSING,MISSING 3, pqr, 123, 456, 789, 000, 000 9,MISSING,MISSING,MISSING,MISSING, 000, 000
有什麼幫助嗎?
我不認為你
join
一個人可以做到。你可以這樣做:join -t, -a1 -a2 -o0,1.2,1.3,1.4,1.5,2.2,2.3,2.4,2.5 -e MISSING 1.txt 2.txt | perl -F, -lape '@F[1..2]=@F[5..6] if $F[1] eq "MISSING"; $_=join",",@F[0..4],@F[7..8]'
-p
: 使用 sed/awk 中的逐行讀取循環-a
,-F,
: 像 awk 一樣,將行拆分為欄位(到@F
數組中)。-l
: 適用於行的內容(如輸入在( )awk
上拆分(但不包括在) 和( ) 在列印前附加)。RS``$/``RS``$0``ORS``$\
-e ...
: perl$$ e $$xpression 評估每一行。- 然後它讀起來幾乎像英語:如果欄位 1(索引從 0 開始的第二個欄位)為“MISSING”,則欄位 1 到 2 設置為欄位 5 到 6。然後設置目前記錄的內容( $ _ is like $ awk 中的 0)到欄位 0 到 4 和 7 到 8。
實際上,寫同樣的
awk
東西並不復雜:awk -F, -vOFS=, '$2 == "MISSING"{$2=$6;$3=$7} {print $1,$2,$3,$4,$5,$8,$9}'