substituir linhas no arquivo original de outro arquivo pelo número da linha

2

Texto original:

yes
no
approved
declined

Segundo texto

1111 1
333 4

1 e 4 são os números de linha que eu gostaria de substituir no texto original

Saída:

1111
no
approved
333

como lidar com isso

    
por αԋɱҽԃ αмєяιcαη 21.11.2017 / 16:19

2 respostas

2

Abordagem curta awk :

awk 'NR==FNR{ a[$2]=$1; next }FNR in a{ $0=a[FNR] }1' file2 file1
  • a[$2]=$1 - capturando o primeiro campo $1 valores usando o segundo campo $2 valor como array a index (ao processar o primeiro arquivo de entrada, ou seja, file2 )
  • $0=a[FNR] - substitua a linha inteira pelo valor em relação ao número de registro atual FNR (ao processar o file1 )

A saída:

1111
no
approved
333
    
por 21.11.2017 / 16:30
0

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 aceita 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 aceita stdin para o script.

O script sed intermediário é assim com sua entrada de amostra:

1c\
1111
4c\
333
    
por 21.11.2017 / 19:27