substitua as linhas do arquivo original de outro arquivo pelo número da linha

substitua as linhas do arquivo original de outro arquivo pelo número da linha

Texto original:

yes
no
approved
declined

Segundo Texto

1111 1
333 4

1e 4sã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 $1os valores do primeiro campo usando $2o valor do segundo campo como aíndice da matriz (ao processar o primeiro arquivo de entrada, ou seja file2)
  • $0=a[FNR]- substitua a linha inteira pelo valor referente ao número do registro atual FNR(ao processar o file1)

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

informação relacionada