arquivo1:
G A 4
H B 3
I C 2
J D 1
arquivo2:
M H 6
N H 5
O K 4
P J 3
Q I 2
R I 1
S G 0
T L 1
Desejado:
M H 6
N H 5
P J 3
Q I 2
R I 1
S G 0
imprimir apenas linhas em que $ 2 do arquivo2 corresponde a $ 1 do arquivo1
Estou tentando construir a instrução if, mas isso me dá erro de sintaxe para abaixo
awk 'NR==FNR{a[NR]=$1; b[NR]=$2; next} ; {if{a[FNR]==b[FNR]}; {next}; { print }' file1 file2
syntax error at source line 1
context is
NR==FNR{a[NR]=$1; b[NR]=$2; next} ; >>> if <<< {a[FNR]==b[FNR]; next}; { print }
ou sem saída se não usar se verbo
awk 'NR==FNR{a[NR]=$1; b[NR]=$2; next} ; {a[FNR]==b[FNR]; next}; { print }' file1 file2
Você está complicando demais seu código. Tente assim:
Explicação:
O filtro
NR==FNR
filtra apenas as linhas do arquivo1, pois para esse arquivo o número total do registro será o mesmo que o número do registro do arquivoPara as linhas do primeiro arquivo, adicionamos o primeiro campo (
$1
) como chave para arraya
, coma[$1]
. Então pulamos o resto dos comandos comnext
Como chamamos
next
o primeiro bloco que se aplica a todas as linhas do primeiro arquivo, o segundo filtro$2 in a
se aplica apenas às linhas do segundo arquivo.O filtro
$2 in a
verifica se a segunda palavra$2
é uma chave no arraya
. Se a chave existir, a ação padrão será executada, que é imprimir a linha atual.resultado
Primeiro, ele abrirá o arquivo1 e lerá linha por linha e abrirá o arquivo2 e verificará para cada linha se o arquivo1 primeira linha coluna 1 corresponde a qualquer linha coluna2 para arquivo2 . se corresponder, imprime a linha correspondente do arquivo2 e continua para mais linhas para arquivo1 e arquivo2