Vantagens do arquivo e piping para o grep

17

Existe alguma vantagem adicional de catar um arquivo e direcioná-lo ao grep, além de conveniência? A conveniência é que, quando eu recupero comandos como os que estão abaixo do meu histórico, o cursor está no final da linha, então é fácil modificar o comando com texto diferente para o grep no mesmo arquivo.

Quais outras vantagens podem existir para a seguinte convenção:

cat /var/tmp/trace.2043925204.xt | grep -in profile
cat /var/tmp/trace.2043925204.xt | grep -n Profile-Main

em vez de:

grep -in profile /var/tmp/trace.2043925204.xt 
grep -n Profile-Main /var/tmp/trace.2043925204.xt 
    
por George Jempty 23.09.2010 / 17:45

7 respostas

18

Melhor evitar gato; escreva desta forma se a edição de linhas for importante:

$ < filename grep pattern

O motivo é que o envio de todos os dados por meio do cat custa memória e recursos da CPU. Outro benefício de passar o nome do arquivo como um argumento ao invés de redirecionar o stdin é que ele permite ao comando a opção de mmap () o arquivo.

    
por 23.09.2010 / 18:23
8

Não há vantagem. Seu cursor no final também não importa muito se você estruturá-lo desta forma: < inputfile grep -args foo

    
por 23.09.2010 / 17:49
5

Você simplesmente não precisa usar o gato nessa situação. É desnecessário e um desperdício de tempo, porque ferramentas como o grep usam nomes de arquivos como argumentos.

[root@un1xf00 root]# time cat passwd | grep root
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

real    0m0.021s
user    0m0.000s
sys     0m0.030s
[root@un1xf00 root]# time grep root passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

real    0m0.002s
user    0m0.000s
sys     0m0.000s
[root@un1xf00 root]#

Atualização: Obrigado, @Andy Lester, por apontar que esses tempos não levam em conta o cache de disco. Eu aprendi algo novo! Mas economias de uma fração de segundo não fazem muita diferença de qualquer maneira. Eu só acho que piping cat grep não é uma maneira lógica de fazer as coisas. É como pedir a alguém para ajudá-lo com um problema, quando você é perfeitamente capaz de resolvê-lo sozinho.

    
por 23.09.2010 / 18:08
5

Não acredito que ninguém tenha mencionado o link que ainda não foi mencionado

Existe uma vantagem questionável. Se você tem um pipeline longo, parece um pouco mais ortogonal com o gato:

cat file | command1 | command 2 | command3

Agrupa todos os comandos juntos.

É claro que outros já disseram (e eu)

< file command1 | command2 | command3

Realiza praticamente a mesma coisa. Dito isso, o gato é muito pequeno e não trará o seu computador para baixo se você usá-lo quando você realmente não precisa.

Normalmente, usar cat vs diretamente em um arquivo não muda nada, mas faz diferença para certos comandos que se importam se há vários arquivos como argumentos, como grep . Caso em questão:

cat file1 file2 | grep SOMETHING

terá saída diferente de

grep SOMETHING file1 file2

Que terá os nomes de arquivos correspondentes na saída. Há momentos em que não quero os nomes dos arquivos, e é uma vantagem usar cat .

    
por 24.09.2010 / 23:23
3

A facilidade de edição é a única vantagem real, e se você estiver fazendo isso na linha de comando, qualquer tempo adicional necessário para executar o cat e fazer o pipe não fará diferença.

Não há razão para fazê-lo em um script de shell.

    
por 23.09.2010 / 18:17
2

Não há benefício algum. Em vez de se preocupar em modificar os comandos, aprenda a navegar melhor pela linha de comando do seu shell com teclas aceleradoras e atalhos.

    
por 23.09.2010 / 18:17
1

Não, e pode até ser um pouco mais lento no exemplo que você dá.

Um pipe é criado entre cat e grep, o que não é necessário ao passar o nome do arquivo diretamente para grep. No entanto, não acredito que, em nenhuma circunstância, você venha a observar limitações de throughput por causa disso.

Outras vantagens da entrada de tubulação para o grep incluem processamento adicional anterior, como o uso de utilitários com recursos mais avançados de leitura de arquivos. (Veja tee , zcat , entre outros).

    
por 23.09.2010 / 17:51