#!/bin/bash
IFS=";"
while read NAME VALUE
do
sed -i "s/${NAME}/${VALUE}/g" file1
done < file2
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
#!/bin/bash
IFS=";"
while read NAME VALUE
do
sed -i "s/${NAME}/${VALUE}/g" file1
done < file2
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.
Tags text-processing text