edita um arquivo usando os valores em outro arquivo como entrada e redireciona a edição do arquivo para outro arquivo

2

Então, basicamente, eu tenho um arquivo que contém o seguinte Data.txt

<IP Address1>, 10, 23, <GW IP1>
FINAL INPUT.45.324
<IP Address2>, 40, 33, <GW IP2>

Outro arquivo que possui valores para cada TAG, conforme especificado abaixo de info.txt

<IP Address1>10.155.120.20
<GW IP1>10.155.120.30
<IP address2>10.30.123.30
<GW IP2>10.30.123.1

Gostaria que a final fosse assim (arquivo.txt)

10.155.120.20, 10, 23, 10.155.120.30
FINAL INPUT.45.324
10.30.123.30, 40, 33, 10.30.123.1

Tentando encontrar exemplos, mas não consigo descobrir

    
por Mike 30.10.2018 / 21:15

2 respostas

0

O que você está procurando é chamado de mecanismo de modelo. Eu fiz extremly simple not reliable one para você. É baseado em sed e provavelmente é extremamente frágil.

Observe que você tem <IP address2>10.30.123.30 em vez de <IP Address2>10.30.123.30 , então meu script não funcionou como esperado. O código completo está abaixo:

#!/usr/bin/env bash
cat <<EOF >file_1
<IP Address1>, 10, 23, <GW IP1>
FINAL INPUT.45.324
<IP Address2>, 40, 33, <GW IP2>
EOF
cat <<EOF >file_2
<IP Address1>10.155.120.20
<GW IP1>10.155.120.30
<IP Address2>10.30.123.30
<GW IP2>10.30.123.1
EOF
cp file_1 file_final
while read to_split; do
    echo "to_split: $to_split"
    arg1="${to_split%>*}>" # > because it is removed
    arg2="${to_split#*>}"
    echo "1: $arg1"
    echo "2: $arg2"
    sed -i  "s/$arg1/$arg2/g" file_final
done < file_2

O script é autônomo para que você possa testá-lo sozinho:).

O problema é que não posso dizer que esta é uma ótima solução. A solução real seria usar o mecanismo de alguns templates como o Jinja2.

    
por 30.10.2018 / 22:14
0

Quão longe

awk  '
NR==FNR         {T[$1 FS] = $2
                 next
                }
                {for (i=1; i<=NF; i++) if ($i in T) $i = T[$i]
                }
1
'
FS=">" file2 FS=", " OFS=", " file1
10.155.120.20, 10, 23, 10.155.120.30
FINAL INPUT.45.324
10.30.123.30, 40, 33, 10.30.123.1

você? Ele coleta os valores de substituição do arquivo2 em uma matriz indexada pelo rótulo e, em seguida, no arquivo de dados1, verifica a existência de cada campo na matriz e a substitui, se aplicável. Eu substitui o "endereço" minúsculo por letras maiúsculas, btw.

    
por 31.10.2018 / 18:00