シェルスクリプトで区切り文字で2つのファイルを比較し、1つのファイルを更新します。

シェルスクリプトで区切り文字で2つのファイルを比較し、1つのファイルを更新します。

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  

おすすめ記事