Compare dois arquivos e a linha correspondente é enviada para o novo arquivo

2

Eu tenho dois arquivos

arquivo1.txt

a|1|cd
a|2|cd
a|4|cd

arquivo2.txt

a|0001|hj|df
a|0002|ed|nb
a|0003|vf|za
a|0004|er|ns
a|0005|oi|lk

Eu preciso criar um novo arquivo com as linhas correspondidas pela segunda coluna dos arquivos, eu tento no próximo código

awk -F"|" 'NR==FNR{a[$2]++;next} a[$2] ' file1.txt file2.txt

mas nenhum registro encontrado, porque o arquivo1.txt na segunda coluna não contém 0 à esquerda eu tenho a instrução

awk -F"|" 'NR==FNR{a[$(printf("%09d\n", $2))]++;next} a[$2]'

mas não funciona.

O resultado deve ser:

file3.txt

a|0001|hj|df
a|0002|ed|nb
a|0004|er|ns
    
por Miguel Angel 29.10.2015 / 00:02

1 resposta

2

Adicionando zero às forças de campo awk para tratá-lo como um número, não como uma string:

$ awk -F"|" 'NR==FNR{a[$2+0]++;next} a[$2+0] ' file1.txt file2.txt
a|0001|hj|df
a|0002|ed|nb
a|0004|er|ns

Como uma string 0001 é diferente de 1 . Adicionando zero a cada, nós os convertemos em números, o que resulta na comparação que você deseja.

    
por 29.10.2015 / 00:07