Substitua um padrão no Arquivo1 e substitua-o pelo padrão correspondente correspondente + coluna no Arquivo2

1

Eu pesquisei muitos Q & semelhantes, mas ainda estou preso em uma solução.

Eu tenho 2 arquivos.

Arquivo1

cow
aaaaa
brown
bbbbb
often
ccccc
farts
ddddd

Arquivo2

No Arquivo2, com 'espaço' como um delimitador, col 1="brown" e col2="149,456, foo". Além disso, File1 e File2 não estão na mesma ordem (a classificação não funciona aqui, quero contar com a chave correspondente para fazer a substituição).

brown 149,456,foo
cow 192,231,bar
farts 81,2007,tip
often 427,541,top

Eu quero criar o File3

cow 192,231,bar
aaaaa
brown 149,456,foo
bbbbb
often 427,541,top
ccccc
farts 81,2007,tip
ddddd

Em outras palavras, observe column1-in-File2 (marrom) e procure por ele no Arquivo1. Quando essa correspondência for encontrada no Arquivo1, substitua a correspondência com a linha inteira do Arquivo2 correspondente (marrom 149,456, foo).

Eu tentei isso:

$ awk 'NR==FNR{a[NR]=$0;next}{$6=a[FNR]}1' file2 file1

Mas os resultados parecem tomar cada linha1 e depois imprimi-la ao lado de row1 do outro arquivo, não há correspondência / substituição envolvida.

brown     brown 149,456,foo
aaaa     cow 192,231,bar
cow     farts 81,2007,tip
bbbbb     often 427,541,top
farts     
ccccc     
often     
ddddd 

Eu gostaria de usar o awk ou o sed. Muito obrigado antecipadamente por qualquer sugestão!

    
por Cath 22.12.2017 / 01:42

1 resposta

3

Tente:

$ awk 'FNR==NR{a[$1]=OFS $2;next} {print $0 a[$1]}' file2 file1
cow 192,231,bar
aaaaa
brown 149,456,foo
bbbbb
often 427,541,top
ccccc
farts 81,2007,tip
ddddd

Como funciona

  1. FNR==NR{a[$1]=OFS $2;next}

    Durante a leitura de file2 (o primeiro arquivo na linha de comando), adicionamos uma entrada à matriz associativa a sob a chave do primeiro campo, $1 . A entrada consiste no separador do campo de saída, OFS , seguido pelo segundo campo, $2 . Em seguida, ignoramos o restante dos comandos e pulamos para começar de novo na linha next .

  2. imprimir $0 a[$1]

    Durante a leitura de file1 (o segundo arquivo na linha de comando), imprimimos cada linha seguida por qualquer que seja o valor da matriz a para a linha.

por 22.12.2017 / 01:50

Tags