Encontre correspondências de um arquivo de índice sem correspondência exata e imprima o último campo

1

Eu tenho um arquivo grande (~ 6 mil linhas) com duas colunas que se parece com isso:

1111.aaaaabbb.b.cccc.c  ValueA
2222.dddddeee.e.ffff.f  ValueB
3333.gggghhhh.h.iiii.i  ValueC

Eu quero usar isso como meu índice ao pesquisar este arquivo de coluna única:

aaaaabbb.b  
dddddeee.e  
gggghhhh.h  

e retorno:

ValueA
ValueB
ValueC
[...]
Valuen

Como você pode ver, eu apenas me preocupo com o valor após o primeiro período, desde que haja uma correspondência exata do conteúdo do segundo arquivo para o primeiro arquivo (não exato). Quero que ele retorne o valor da coluna 2 do primeiro arquivo. Eu não me importo com o prefixo / sufixo do conteúdo do primeiro arquivo, desde que o conteúdo exato do arquivo 2 corresponda.

Existe alguma maneira de fazer isso com a ferramenta awk ou qualquer ferramenta bash ? Atualmente eu estou tentando formatar os dados corretamente no Excel (dados para a ferramenta de coluna), mas está demorando muito, já que eu tenho mais de 6 milhões de linhas, então eu tenho que fazer manualmente 6 arquivos, e então compilar os resultados juntos. / p>

Editar em file1 contents: o prefixo é sempre numérico, mas varia em tamanho de 4 a 7 dígitos. O conteúdo após o primeiro período é alfanumérico e varia em tamanho de 4 a 15 caracteres e pode começar com números ou letras, e o sufixo é também números / alfabetos.

    
por Blaze 13.10.2015 / 04:13

1 resposta

0

Eu suponho que o arquivo com o índice não é muito grande, que pode ser carregado completamente na memória. Se sim, você pode usar este awk :

awk -F"[. ]" 'FNR==NR{a[$0]=1} FNR!=NR&&a[$2"."$3]{print $NF}' index_file huge_file
  • awk é chamado com dois arquivos: index_file com o conteúdo para procurar e huge_file com muitas linhas como na pergunta.
  • -F"[. ]" definiu o delimitador awks para espaço e ponto.
  • FNR==NR aplica-se apenas a index_file
    • a[$0]=1 preenche uma matriz a com os padrões de pesquisa como índices e define o valor como 1 , apenas que a matriz é criada.
  • FNR!=NR aplica-se apenas ao huge_file .
  • a[$2"."$3] se o índice da matriz do campo 2 e o campo 3 concatenado por um ponto existir (quando o padrão é encontrado) ...
    • print $NF imprime o último campo do arquivo.

A saída:

ValueA
ValueB
ValueC
    
por 13.10.2015 / 08:32