Eu tenho 2 arquivos, tentando definir o valor da coluna que é retirado do arquivo2 para o arquivo1 quando suas colunas correspondem
file1:
signup||20200620|A3332|en|LA||ACTIVE
signup||20200620|B4443|en|CA|66001|ACTIVE
signup||20200620|C2221|en|WC||ACTIVE
signup||20200620|D1110|en|LA||ACTIVE
signup||20200620|E5554|en|WC|66003|ACTIVE
file2:
A3332||99001
B4443|66001|99003
D1110|66004|99007
E5554||99004
CRITÉRIOS: $4 do arquivo1 deve corresponder a $1 do arquivo2, após a correspondência deve definir $7 do arquivo1 igual a $3 do arquivo2
DESEJADO:
signup||20200620|A3332|en|LA|99001|ACTIVE
signup||20200620|B4443|en|CA|99003|ACTIVE
signup||20200620|C2221|en|WC||ACTIVE
signup||20200620|D1110|en|LA|99007|ACTIVE
signup||20200620|E5554|en|WC|99004|ACTIVE
o que estou tentando
awk 'BEGIN{ FS=OFS="|" } NR==FNR{a[NR]=$1; b[NR]=$3; next} {if (a[FNR] = $4); $7=b[FNR]; print}' file2 file1
O que estou recebendo
signup||20200620|A3332|en|LA|99001|ACTIVE
signup||20200620|B4443|en|CA|99003|ACTIVE
signup||20200620|C2221|en|WC|99007|ACTIVE
signup||20200620|D1110|en|LA|99004|ACTIVE
signup||20200620|E5554|en|WC||ACTIVE
Estou coçando a cabeça se for um erro lógico ou outra coisa
Existem dois problemas. Primeiro, você tem um erro de digitação:
Isso sempre será verdade, pois você está usando
=
, o operador de atribuição em vez de==
para comparação. Você precisa:O próximo problema é que você não tem o mesmo número de linhas em seu arquivo. Portanto, mesmo se você corrigir o erro de digitação, ele não funcionará como esperado:
A
D1110
linha não está funcionando porqueD1110
está na linha 4 emfile
mas na linha 3 emfile2
. Então você precisa de uma abordagem diferente, algo assim:Talvez a formatação do script ajude a lógica:
Se você ainda precisar corresponder no segundo campo, poderá combinar os campos: