
Eu queria saber se grep, sed e awk eram ferramentas viáveis para localizar dados em arquivos muito grandes.
Digamos que eu tenha um arquivo de 1 TB. Se eu quisesse processar o texto nesse arquivo, como seria o intervalo de tempo se eu usasse os comandos individuais grep, sed e awk, além de misturá-los.
Obviamente, uma resposta específica não é possível, pois os resultados variam de acordo com as especificações do hardware, mas seria útil se eu pudesse obter uma estimativa geral.
Responder1
Geralmente eu diria que grep
é o mais rápido, sed
é o mais lento. É claro que isso depende do que você está fazendo exatamente. Acho awk
muito mais rápido que sed
.
Você pode acelerar o grep se não precisar de expressões regulares reais, mas apenas de strings fixas simples (opção -F).
Se você quiser usar grep, sed, awk juntos em pipes, eu colocaria o comando grep primeiro, se possível.
Por exemplo isto:
grep -F "foo" file | sed -n 's/foo/bar/p'
geralmente é mais rápido que isso:
sed -n 's/foo/bar/p' file
Embora o grep
na primeira linha pareça desnecessário.
Aliás, você pode acelerar esses comandos LC_ALL=C
se estiver lidando com arquivos de texto ASCII simples.
Observe que toda a minha experiência é baseada nos comandos do GNU. Você também pode tentar implementações diferentes e comparar a velocidade.