Por que uma combinação de tail + grep + cut não funciona? [duplicado]

1

Eu queria percorrer alguns logs, enquanto os deixava, e imprimir apenas uma parte de cada linha, já que as linhas são muito longas.

Eu não consigo entender porque a combinação que eu uso não funciona; o procedimento segue:

echo 'Jun 29 16:27:00 someip rails[pid]: Killed a transaction
Jun 29 16:28:00 someip rails[pid]: Killed a transaction' > /tmp/test

# Shows the lines
tail -f /tmp/test | grep Killed

# Shows the lines
grep Killed /tmp/test | cut -c -43

# Shows the lines
cat /tmp/test | grep Killed | cut -c -43

# Doesn't show them
tail -f /tmp/test | grep Killed | cut -c -43

Por que a última combinação não funciona?

    
por Marcus 29.06.2017 / 18:16

1 resposta

0

Como observado nos comentários, o problema é devido ao buffering. O que você pode fazer é executar o comando com stdbuf conforme mostrado aqui .

stdbuf -i0 -o0 -e0 tail -f /tmp/test | grep Killed | cut -c -43

Em nota lateral, você provavelmente pode se livrar de grep e cut pipeline e usar:

stdbuf -i0 -o0 -e0 tail -f /tmp/test | awk '/Killed/{print substr($0,length($0)-43)}'
    
por 30.06.2017 / 23:15