Compare dois arquivos no Shell Script por um delimitador e atualize um arquivo

1

Eu tenho dois arquivos delimitados por pipe

Arquivo1.txt

f1|f2|f3|f4|
123456|C|aws|zip|
589445|D|csv|zip|
789466|C|txt|tar|
874512|A|row|war|

Arquivo2.txt

f1|f2|f3|f4|
458788|C|aws|zip|
589445|D|||
789466|C|wd|rar|
458745|A|xls|rar|

Final.txt

123456|C|aws|zip|
789466|C|wd|rar|
874512|A|row|war|
458745|A|xls|rar|

1. Pegue o campo f2 do Arquivo2, se for D, pegue o campo correspondente f1 do Arquivo2 e identifique a linha correspondente correspondente ao campo f1 no Arquivo1 e exclua a linha do Arquivo1. Mesma maneira

2. Pegue o campo f2 do Arquivo2, se for C, pegue o campo correspondente f1 do Arquivo2 e identifique a linha correspondente correspondente ao campo f1 no Arquivo1 e substitua a linha no Arquivo1 pela linha correspondente no Arquivo2.

2. Pegue o campo f2 do Arquivo2, se for A, adicione diretamente a linha ao Arquivo1 como nova linha.

    
por Juhan 17.07.2018 / 15:18

1 resposta

1

Isso funciona para mim:

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  
    
por 17.07.2018 / 15:46