Mesclar linhas com a primeira coluna correspondente

2

Eu tenho tentado usar o awk para mesclar dois arquivos quando eles têm a mesma primeira coluna. Aqui estão meus arquivos de exemplo:

FileA.txt

A2M    1
A4GALT    11
AAAS    35
AAGAB    7

FileB.txt

A4GALT    2
AAAS    17
AAGAB    7

Como você pode ver, o segundo arquivo não possui a entrada para A2M . Se eu estiver faltando uma entrada, quero que a entrada leia 0 na saída final. Assim:

A2M    1    0
A4GALT    11    2
AAAS    35    17
AAGAB    7    7

Meu companheiro de laboratório sugeriu usar awk , pois join não está funcionando corretamente para mim. Com alguma ajuda, eu criei este comando awk :

awk -F "\t" 'FNR==NR {h[$1] = $2;next} BEGIN{ OFS = "\t"} {print $0,$2?h[$1]:"0"}' FileB.txt FileA.txt

No entanto, minha saída não produz o 0 quando não há correspondência em FileB.txt e, em vez disso, não imprime nada. Alguma ideia sobre o que está errado?

    
por cosmictypist 01.09.2015 / 17:19

1 resposta

3

Se você unir dois arquivos, será um trabalho para join :

join -1 1 -2 1 -a 1 -o 1.1 -o 1.2 -o 2.2 -e "0" FileA.txt FileB.txt

Onde:

  • -1 1 -2 1 define os campos a serem unidos (em ambos os arquivos, o primeiro)
  • -a 1 para forçar join a imprimir as linhas não parciais de FileA.txt
  • -o 1.1 1.2 2.2 é o formato de saída
  • e -e "0" definem o valor a ser armazenado em um campo vazio

A saída:

A2M 1 0
A4GALT 11 2
AAAS 35 17
AAGAB 7 7
    
por 01.09.2015 / 18:54