Processamento de texto: Substituindo strings em uma linha com strings correspondentes

1

Por favor ajude ...

Eu tenho isso como arquivos de entrada

file1

Red + Yellow = Orange; Yellow + Blue = Green; Blue + Red = Violet

file2

Red;1
Yellow;2
Blue;3

Estou fazendo isso no unix.

Saída

file3

1 + 2 = Orange; 2 + 3 = Green; 3 + 1 = Violet
    
por peon 06.12.2016 / 07:22

2 respostas

1

#!/bin/bash

IFS=";"
while read NAME VALUE
do
    sed -i "s/${NAME}/${VALUE}/g" file1
done < file2
    
por 06.12.2016 / 08:56
0
awk 'NR == FNR { # First file
    split($0,a,/;/)
    #print "change " a[1] "to " a[2]
    change[a[1]]=a[2]
}
NR != FNR {
    for (i=1;i<NF;i++) {
            if ($i in change) {
                    $i=change[$i]
            }
    }
    print
}' file2 file1

Use o idk do awk NR! = FNR para dizer se este é o primeiro arquivo ou o segundo. Se for o primeiro arquivo, divida a linha em ; e armazene o mapeamento na matriz de mudança. Se for o segundo, faça um loop sobre o campo de entrada, se houver alguma correspondência, substitua pela alteração correta. No final, imprima o resultado.

    
por 06.12.2016 / 07:52