Unindo dois arquivos com base em duas colunas-chave awk

1

Estou tentando mesclar dois arquivos grandes com base em duas colunas principais (Cromossomo e Posição) e descobri que a maneira mais eficiente parece ser awk .

Uma amostra de como meus arquivos se parecem é:

file1.txt
Gene_ID Chromosome Position Fst
ENSG00000141424 18 33688658 0
ENSG00000141424 18 33688669 0
ENSG00000141424 18 33688681 0
ENSG00000141424 18 33688683 0.0111734
ENSG00000141424 18 33688720 0
ENSG00000141424 18 33688726 0
ENSG00000141424 18 33688743 0
ENSG00000141424 18 33688745 0
ENSG00000141424 18 33688763 0

E o outro arquivo:

file2.txt
Chromosome Start End Ref Alt RS_ID
1   10019   10020   TA  T   rs775809821
1   10020   10020   A   -   rs775809821
1   10055   10055   -   A   rs768019142
1   10055   10055   T   TA  rs768019142
1   10108   10108   C   T   rs62651026
1   10109   10109   A   T   rs376007522
1   10128   10128   A   AC  rs796688738
1   10128   10128   -   C   rs796688738
1   10139   10139   A   T   rs368469931
1   10144   10145   TA  T   rs144773400

Eu quero um terceiro arquivo com esta aparência:

Gene_ID Chromosome Position RS_ID Fst
ENSG00000141424 18 33688658 rs1504554... 0

Eu tentei usar awk e acho que a sintaxe está correta, mas o que recebo é um arquivo contendo file1.txt e file2.txt concatenado.

awk  'FS=" "; OFS=" ";NR=FNR{A[$1,$2]=$6;next}{$5=A[$2,$3];print}' file1.txt file2.txt > file3.txt

Alguma idéia do que eu posso estar fazendo errado?

    
por Rocio 19.03.2018 / 16:26

1 resposta

0

Uma pequena correção do seu código deve corrigir isso

awk 'NR==FNR{A[$1,$2]=$6;next}{$5=A[$2,$3];if($5!="")print}' file2.txt file1.txt
  • NR==FNR em vez de NR=FNR é a condição quando o awk executa o primeiro arquivo file2.txt
  • Na segunda execução, quando NR!=FNR imprimimos a linha, se houver uma chave de associação em A
  • O separador de campo padrão do awk já é um espaço em branco, portanto, não é necessário especificá-los aqui
por 19.03.2018 / 17:45