Encontre várias correspondências em um arquivo tabular e imprima a segunda coluna?

1

Eu tenho um file tabular como este, que é o meu índice:

a   X001
a   X002
a   X003
b   X002
c   X006
z   X007
z   X008
z   X001

Eu quero pesquisar o seguinte arquivo de coluna única com relação a esse índice e retornar cada correspondência da segunda coluna do index .

a
b
z

Assim, a saída dessa pesquisa seria esta:

X001
X002
X003
X002
X007
X008
X001

Editar: aqui estão as informações exatas dos meus arquivos (as 10 principais linhas de cada)

Índice

10803548    COG4190
10803554    COG1476
10803555    COG1192
10803559    COG3385
10803567    COG0071
10803570    COG1695
10803571    COG0467
10803573    COG3883
10803574    COG0714
10803576    COG1192

Arquivo que estou pesquisando:

10956722
11497860
11497860
11497924
11497924
11497924
11497924
11497924
11497979
11497979

A saída esperada desta pesquisa:

COG3704
COG1474
COG1474
COG2801
COG2801
COG2801
COG2801
COG2801
COG2223
COG2223
    
por Blaze 16.10.2015 / 20:57

1 resposta

2

com join :

join -o1.2 <(sort -k1n index) <(sort -k1n file)
  • Isso mesclará os dois arquivos no campo número 1 e, se eles corresponderem, imprimirá o segundo campo do primeiro arquivo 1.2 .

Ou com awk :

awk 'FNR==NR{a[$1]=1} FNR!=NR&&a[$1]{print $2}' file index
  • O arquivo file é carregado em uma matriz a .
  • Quando o segundo arquivo index processado awk verificar se o primeiro campo está na matriz como índice a[$1] . Se sim, imprima o segundo campo $2 .
por 16.10.2015 / 21:24