2つのパイプで区切られたファイルがあります。
ファイル1.txt
f1|f2|f3|f4|
123456|C|aws|zip|
589445|D|csv|zip|
789466|C|txt|tar|
874512|A|row|war|
ファイル2.txt
f1|f2|f3|f4|
458788|C|aws|zip|
589445|D|||
789466|C|wd|rar|
458745|A|xls|rar|
最終.txt
123456|C|aws|zip|
789466|C|wd|rar|
874512|A|row|war|
458745|A|xls|rar|
1. File2からフィールドf2を取得し、Dの場合は、File2からそのフィールドf1を取得し、File1でフィールドf1と一致する対応する行を見つけて、File1から行を削除します。同じ方法
2. File2からフィールドf2を取得してCの場合は、File2から対応するフィールドf1を取得し、File1で対応する行一致フィールドf1を見つけ、File1の行をFile2の対応する行に置き換えます。
2. File2 からフィールド f2 を取得します。 Aの場合は、その行をFile1に直接新しい行として追加します。
ベストアンサー1
これは私にとって効果的です。
while read line
do
i=$(echo $line | cut -d\| -f1 )
f=$(echo $line | cut -d\| -f2 )
case $f in
D) sed -i /^$i/d File1.txt ;;
C) sed -i s/^$i.*/$line/ File1.txt ;;
A) echo $line >> File1.txt;;
esac
done < File2.txt