我正在嘗試加入兩個具有相同第 1 列和不同第 2 列的檔案:
檔案 1
aaa 1
bbb 3
bbb 3
ccc 1
ccc 1
ccc 0
檔案2
aaa 2
bbb 2
bbb 2
ccc 1
ccc 1
ccc 0
當我嘗試加入他們
join File1 File2 > File3
我明白了
aaa 1 2
bbb 3 2
bbb 3 2
bbb 3 2
bbb 3 2
ccc 1 1
ccc 1 1
ccc 1 0
ccc 1 1
ccc 1 1
ccc 1 0
ccc 0 1
ccc 0 1
ccc 0 0
join 當我想要做的只是逐行進行時,正在嘗試擴展重復項,因此輸出應該是
aaa 1 2
bbb 3 2
bbb 3 2
ccc 1 1
ccc 1 1
ccc 0 0
如何告訴join忽略重復項并逐行合并檔案?
編輯:這是在多個檔案的回圈中完成的,這些檔案都具有相同的第 1 列但不同的第 2 列。我將前兩個檔案加入到一個臨時檔案中,然后回圈通過與該臨時檔案加入的其他檔案。
uj5u.com熱心網友回復:
根據@Andre Wildberg 的建議,這效果最好:
paste File1 <(cut -d " " -f 2 File2)
這允許遍歷檔案串列:
cat File1 > tmp
for file in $files
do
paste tmp <(cut -d " " -f 2 $file) > tmpf
mv tmpf tmp
done
mv tmp FinalFile
uj5u.com熱心網友回復:
假設:
- 所有檔案都具有相同的行數
- 對于相同編號的行,所有檔案在第一列中具有相同的值
- 最終結果集可以放入記憶體
樣本輸入:
$ for f in f{1..4}
do
echo "############ $f"
cat $f
done
############ f1
aaa 1
bbb 3
bbb 3
ccc 1
ccc 1
ccc 0
############ f2
aaa 2
bbb 2
bbb 2
ccc 1
ccc 1
ccc 0
############ f3
aaa 12
bbb 12
bbb 12
ccc 11
ccc 11
ccc 10
############ f4
aaa 202
bbb 202
bbb 202
ccc 201
ccc 201
ccc 200
一個awk想法:
awk '
FNR==NR { a[FNR]=$0; next }
{ a[FNR]=a[FNR] OFS $2 }
END { for (i=1;i<=FNR;i )
print a[i]
}
' f1 f2 f3 f4
這會產生:
aaa 1 2 12 202
bbb 3 2 12 202
bbb 3 2 12 202
ccc 1 1 11 201
ccc 1 1 11 201
ccc 0 0 10 200
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/407712.html
標籤:
下一篇:Shell腳本:單引號轉義
