Primeiro, crie um script sed a partir desses dois arquivos:
paste -d$'\t' find.csv replace.csv |
sed -e 's:/:\/:g; s:\t:/:; s:^:s/:; s:$:/g;:' > myscript.sed
Isso substituirá todas as ocorrências de strings em find.csv
pelas strings em replace.csv
. Ele falhará se alguma das linhas em find.csv
contiver um caractere de tabulação, já que isso está sendo usado por paste
como o separador entre as linhas unidas.
A saída é assim:
s/CHL_13_R4/CHL_13_R12,CHL_13,R12,10\/14\/2014/g;
s/DCK_09_R4/DCK_09_R12,DCK_09,R12,10\/14\/2014/g;
s/DCK_10_R4/DCK_10_R32,DCK_10,R32,10\/14\/2014/g;
s/DCK_11_R4/DCK_11_R21,DCK_11,R21,10\/14\/2014/g;
s/DCK_13_R4//g;
(observe que a última linha não tem uma substituição. Isso porque seu find.csv
tinha 5 linhas, enquanto seu replace.csv
tinha apenas 4 linhas)
Se você quiser substituir toda a linha contendo strings de find.csv
:
paste -d$'\t' find.csv replace.csv |
awk -F$'\t' '{gsub(/\//,"\/"); print "/"$1"/ s/^.*/"$2"/;"}' > myscript.sed
A saída desta versão é assim:
/CHL_13_R4/ s/^.*/CHL_13_R12,CHL_13,R12,10\/14\/2014/;
/DCK_09_R4/ s/^.*/DCK_09_R12,DCK_09,R12,10\/14\/2014/;
/DCK_10_R4/ s/^.*/DCK_10_R32,DCK_10,R32,10\/14\/2014/;
/DCK_11_R4/ s/^.*/DCK_11_R21,DCK_11,R21,10\/14\/2014/;
/DCK_13_R4/ s/^.*//;
De qualquer forma, qualquer que seja a versão que funcione melhor para você, depois de gerar o script myscript.sed
, execute-o no seu mainfile.csv
:
sed -f myscript.sed mainfile.csv
(opcionalmente use -i
se você quiser fazer uma edição 'in-place' em mainfile.csv
)
NOTA: é possível fazer isso sem usar um arquivo temporário como myscript.sed
para manter o script. A maioria das versões do sed pode executar scripts do stdin. Mas dessa forma, você pode examinar e / ou editar o script sed gerado antes de executá-lo no seu arquivo principal.