awk não pode imprimir elemento da matriz

1

Deixa sentado meu arquivo1 é:

A   S   
B   Q

arquivo2 é:

B   2

Quero corresponder $ 1 do arquivo2 com $ 1 arquivo1 e imprimir o arquivo1 $ 2 & & file2 $ 2, para a saída assim:

Q   2    

Minha solução awk é:

awk 'NR==FNR {a[$1]=$1$2;next} $1 in a {print $2, a[$2]}' file2 file1 

E isso me dá apenas Q - ele não imprime o segundo elemento do array.
Como posso imprimir o elemento da matriz?

Editar

Atualizei minha pergunta, pois a resposta que funciona para o exemplo fictício não funciona com meus dados reais.

f1 
chr2    47558199    ENSG00000236824.1 
chr2    47558199    ENSG00000236824.1 
chr2    47558199    ENSG00000236824.1 

f2
ENSG00000236824.1   AAAAAAA

Quero corresponder f2 $1 a f1 $3 e imprimir f1 $0 plus f2 $2

Eu tentei esta resposta awk 'NR==FNR {a[$1]=$2;next} $3 in a {print $0, a[$1]}' f2 f1 ,
mas ainda não obtendo a saída que quero.

awk code acima me traz apenas isto:

chr2    47558199    ENSG00000236824.1 
chr2    47558199    ENSG00000236824.1 
chr2    47558199    ENSG00000236824.1 
    
por PoGibas 20.06.2013 / 17:04

1 resposta

4

Você estava quase lá. Basta alterar o índice da matriz para $ 1 - esse é o elemento comum dos dois arquivos:

awk 'NR==FNR {a[$1]=$2;next} $1 in a {print $2, a[$1]}' file2 file1

E não há ideia de por que você coloca $ 1 $ 2 no array, já que parece precisar de apenas $ 2.

Atualizar de acordo com a edição da pergunta.

Você coloca claramente que "correspondência f2 $1 com f1 $3 " (desejo que todas as perguntas sejam tão claras), portanto, basta escrever no código de acordo:

              f2 $1                             f1 $3
                |                                 |
awk 'NR==FNR {a[$1]=$2;next} $3 in a {print $0, a[$3]}' f2 f1
    
por 20.06.2013 / 17:11

Tags