Awk compara 2 arquivos, combinações de impressão junto com linhas não correspondentes preenchidas com 0

4

Eu tenho dois arquivos.

Quero corresponder a primeira coluna do primeiro arquivo à primeira coluna do segundo arquivo. Se houver uma correspondência, gostaria de imprimir a segunda coluna do segundo arquivo, se não 0.

Eu tentei o awk ( awk 'FNR==NR{a[$1]=$0;next} {print a[$1]}' 2.txt 1.txt ) mas não está funcionando.

F1.txt

A
B
C
D
E
F
G
H
I
J

F2.txt

A  0.5
E   1
H   0.5
J    1

Desired_output

A    0.5
B    0
C    0
D    0
E    1
F    0
G    0
H    0.5
I    0
J   1
    
por Mandy 11.01.2015 / 17:59

1 resposta

7

Supondo que seus arquivos de entrada são delimitados por tabulação:

$ join -a 1 -e 0 -t $'\t' -o 1.1,2.2 F1.txt F2.txt 
A   0.5
B   0
C   0
D   0
E   1
F   0
G   0
H   0.5
I   0
J   1

join os dois arquivos, asseguram que todas as linhas do primeiro arquivo estejam presentes ( -a ), se algum campo for nulo então use o valor "0" ( -e ), pegue o primeiro campo do primeiro arquivo e o segundo campo do segundo arquivo ( -o ), e use tab como o delimitador ( -t )

Se você quiser o awk, eu escrevo (note a ordem dos argumentos do arquivo)

awk 'BEGIN {FS=OFS="\t"} NR==FNR {v[$1]=$2; next} {print $1, (v[$1] ? v[$1] : 0)}' F2.txt F1.txt
    
por 11.01.2015 / 18:14