
Texto original:
yes
no
approved
declined
Segundo Texto
1111 1
333 4
1
e 4
são os números das linhas que eu gostaria de substituir no texto original
Saída:
1111
no
approved
333
como lidar com isso
Responder1
Curtoestranhoabordagem:
awk 'NR==FNR{ a[$2]=$1; next }FNR in a{ $0=a[FNR] }1' file2 file1
a[$2]=$1
- capturando$1
os valores do primeiro campo usando$2
o valor do segundo campo comoa
índice da matriz (ao processar o primeiro arquivo de entrada, ou sejafile2
)$0=a[FNR]
- substitua a linha inteira pelo valor referente ao número do registro atualFNR
(ao processar ofile1
)
A saída:
1111
no
approved
333
Responder2
Se você gosta de programas geradores de programas, você pode usar o awk para criar um script sed:
awk '{printf "%dc\\\n%s\n", $2, $1}' < second | sed -f - original
se o seu sed aceitar stdin para o script, ou:
awk '{printf "%dc\\\n%s\n", $2, $1}' < second > tempfile &&
sed -f tempfile original &&
rm tempfile
se o seu sed não aceitar stdin para o script.
O script sed intermediário fica assim com sua entrada de exemplo:
1c\
1111
4c\
333