Conte em tempo real as linhas de saída de outro comando de saída

3

Acho que o que eu quero fazer é muito fácil, mas não consigo encontrar uma maneira de fazer isso:

Se eu colocar este comando:

[root@:Active] tmp # tcpdump -i any -s 65535 host 192.168.1.110 and port 1645 or port 1813 -v
-X | grep -o 'Start'
Start
Start
...
...
...
Start
Start
10047 packets captured
10046 packets received by filter
0 packets dropped by kernel

Eu tenho muita coincidência inicial, mas eu só quero contar quantos "Start" está realmente mostrando no shell (enquanto o comando tcpdump está sendo executado).

Eu tento adicionar wc -l:

[root@:Active] tmp # tcpdump -i any -s 65535 host 192.168.1.110 and port 1645 or port 1813 -v
-X | grep -o 'Start' | wc -l
tcpdump: listening on any, link-type EN10MB (Ethernet), capture size 65535 bytes

Mas ainda assim nada, não quero salvar um arquivo com a saída do tcpdump e depois contar, basta contar as linhas de saída que já estão mostrando, em tempo real.

Também tento alguma combinação com xargs, mas ainda falho na contagem. Eu acho que "wc -l" "grep -c" e comandos similares precisam de um arquivo para apontar e contar, mas eu não sei onde na memória a saída do tcpdump é o armazenamento.

Se você tiver alguma idéia inteligente, vai gostar: D.

Eu ainda acho que estou perdendo algumas coisas bobas, as linhas já estão mostrando no shell, eu só preciso contar quantas são, sem salvar nenhum arquivo ou parar o tcpdump.

Enquanto isso, vou continuar tentando, um amigo me disse que, com a linguagem AWK, posso fazer isso.

Saudações a todos.

    
por Carlos 31.12.2011 / 05:08

1 resposta

5

Você parece querer a contagem em vez da saída "Iniciar".

Exibir contagem:

tcpdump -i any -s 65535 host 192.168.1.110 and port 1645 or port 1813 -v -X |
  awk '/Start/ {c++;print c} {}'

Exibir contagem e linha:

tcpdump -i any -s 65535 host 192.168.1.110 and port 1645 or port 1813 -v -X |
  awk '/Start/ {c++; print c, $0} {}'

Exibir contagem na mesma linha:

tcpdump -i any -s 65535 host 192.168.1.110 and port 1645 or port 1813 -v -X |
  awk '/Start/ {c++; printf "\r%d", c} {} END {print}'
    
por 31.12.2011 / 08:54

Tags