在 Shell 脚本中通过分隔符比较两个文件并更新一个文件

在 Shell 脚本中通过分隔符比较两个文件并更新一个文件

我有两个管道分隔文件

文件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  

相关内容