Extraia linhas contendo determinado valor ou maior

6

Estou trabalhando com um arquivo de log que contém entradas que aparecem assim:

$Hostname1:  0x7FDBF4B1AB10 (  23698) waiting 100 seconds, NSDThread: for I/O completion on disk vd4
$Hostname2:  0x7F2D10A2F8C0 (  25393) waiting 200 seconds, NSDThread: for I/O completion on disk vd35
$Hostname3:  0x7F2D109F4290 (  25343) waiting 900 seconds, NSDThread: for I/O completion on disk vd11
$Hostname4:  0x7FDBF4B1AB30 (  23698) waiting 100 seconds, NSDThread: for I/O completion on disk vd40
$Hostname5:  0x7F2D10A2F830 (  25392) waiting 750 seconds, NSDThread: for I/O completion on disk vd13
$Hostname6:  0x7F2D109F4240 (  25342) waiting 500 seconds, NSDThread: for I/O completion on disk vd14

Eu gostaria de filtrar as linhas onde o tempo de espera é maior que um valor arbitrário (digamos 600 segundos). Qual é a melhor maneira de fazer isso no bash?

    
por Jeff Schaller 08.10.2018 / 14:22

2 respostas

14

Esse awk vai te dar o que você quer.

awk '$6 > 600 { print }' file

$Hostname3:  0x7F2D109F4290 (  25343) waiting 900 seconds, NSDThread: for I/O completion on disk vd11
$Hostname5:  0x7F2D10A2F830 (  25392) waiting 750 seconds, NSDThread: for I/O completion on disk vd13

ou por @Kusalananda, esta linha é suficiente

awk '$6 > 600 ' file 
    
por 08.10.2018 / 14:24
0

A resposta de Goro está bem. Apenas para garantir o teste sobre o número entre () que poderia preencher o espaço

awk -F '[ \t(]+' '$5 > 600' file
    
por 08.10.2018 / 16:07