string UNIX comparando em arquivo grande

1

Eu tenho um arquivo de texto grande com mais de 75 milhões de registros. Cada registro consiste em tokens de string (atributos) e entre cada token existe um caractere de tabulação. Este é um exemplo de dois registros:

43    ao489fer809    abcdefghikl    1.41    0

81    ijfij03iuff    abcdefghikl e89rt904i3 094utofgimf    0.13    1

Assim, cada registro consiste em 5 tokens (observe que o terceiro token inclui o caractere de espaço).

Agora vamos supor que eu tenha a string "abcdefghikl" -let's call it the key-. Estou interessado no terceiro sinal. Então eu quero comparar a chave com o terceiro token e se o token é exatamente a chave (e não contém apenas a chave como meu segundo registro), para gravar o registro vencedor em um novo arquivo . Alguma idéia do grep?

    
por ddmichael 26.10.2012 / 21:11

2 respostas

3

Eu usaria awk nessa situação

awk -F"\t" '$3 == "abcdefghikl" {print}' filename > outputfile

Quando você define o separador como uma guia e imprime apenas as linhas em que a terceira coluna corresponde à chave.

    
por 26.10.2012 / 21:20
0

grep

$ cat -v td
43      ao489fer809     abcdefghikl     1.41    0
81      ijfij03iuff     abcdefghikl e89rt904i3 094utofgimf      0.13    1

$ grep -P '\tabcdefghikl\t' td
43      ao489fer809     abcdefghikl     1.41    0

ou se for mimado

$ grep -P '^[^\t]*\t[^\t]*\tabcdefghikl\t' td
43      ao489fer809     abcdefghikl     1.41    0
    
por 26.10.2012 / 21:40