Linux
文件比較錯誤 - awk
我有兩個文件
file1.txt
,file2.txt
. 我想根據第 2 列和第 3 列選擇兩者共有的記錄,並將它們複製到file1.txt
附加列(第 4 列來自)。file2.txt``out.txt``file2.txt
樣本輸入:
file1.txt
abc 1 a f11 f13 f14 abd 2 b f12 f14 f13 abe 4 d f13 f16 f12 acf 5 s f14 f15 f19
file2.txt
abc 1 a f21 f23 f24 abd 1 b f21 f24 f23 abe 4 d f24 f26 f22 acf 6 s f23 f25 f29
期望的輸出
out.txt
abc 1 a f11 f13 f14 f21 abe 4 d f13 f16 f12 f24
我之前問過一個類似的問題,關於如何處理三個文件並根據類似的輸入提取類似的輸出以便更好地理解。我是 Unix 世界的新手,一直在學習如何進行文件處理。基於此,我嘗試使用以下程式碼,
awk
但沒有成功。有人可以檢查並建議,出了什麼問題?awk 'FILENAME == ARGV[1] { m[$2,$3] = 0; z[$2,$3] = $6; next; } { if (($2,$3) in m && m[$2,$3] == 1) { print $0 " " z[$2,$3] >"out.txt"; } }' file2.txt file1.txt
在您的範例中,您正在創建值為 0 的數組 m。您沒有將其設置為 1,並且您不需要。您可以將值設置為整行,例如 $0。
試試這個:
awk 'FILENAME == ARGV[1] { m[$2,$3] = $0; next; } { if (($2,$3) in m) { print m[$2,$3] " " $4 >"out.txt"; } }' file1.txt file2.txt
awk
awk 'FNR==NR { a[$2, $3]=$4 next } ($2, $3) in a{ print $0, a[$2, $3] } ' file2.txt file1.txt > out.txt
加入
join -j 2 \ <(sort -k2,3 file2.txt | sed 's/ /+/2') \ <(sort -k2,3 file1.txt | sed 's/ /+/2') \ -o 1.1,1.2,1.3,1.4,1.5,2.3 | sed 's/+/ /' > out.txt