Saya memiliki beberapa contoh cara berbeda untuk mengekstrak informasi waktu dari ping -c 10 google.com
. Untuk beberapa jalur pipa ini, jalur keluaran sering dihasilkan, sama seperti keluaran ping. Untuk yang lain, jalur keluaran dipancarkan sekaligus setelah semuanya diproses. Apakah ada aturan yang baik tentang kapan saya akan melihat perilaku pertama dan kapan saya akan melihat perilaku kedua?
# prints output for each line as soon as it is received
# on OS X and Linux.
ping -c 10 google.com | grep -o 'time=S*'
# prints output for each line as soon as it is received on OS X
# but not on Linux
# (the output of ping is slightly different so it's $8 on Linux to get the time)
ping -c 10 google.com | awk '{ print $7 }'
# waits until all input is received on OS X and Linux
ping -c 10 google.com | awk -F ':' '{ print $2 }'
# prints output for line as soon as it is received on Linux and OS X
ping -c 10 google.com | sed -e 's/^.*time=(.*) .*$/1/'
# waits for the end of input on OS X and Linux
ping -c 10 google.com | grep -o 'timeS*' | sed -e 's/time=//'
# as a quick check, this prints each line of output immediately
# on OS X and Linux
ping -c 10 google.com | sed -e 's/time=//'
Setelah melihat-lihat sebentar, ini tampaknya hanya masalah buffering baris dan beberapa utilitas standar berperilaku berbeda saat digunakan secara interaktif vs non-interaktif.
Jawaban yang Diterima:
Ini tentang bagaimana buffering ditangani dengan program tersebut.
Jika Anda ingin grep segera mengeluarkan data yang disalurkan, gunakan dengan opsi –line-buffered.
ping -c 10 google.com | grep --line-buffered -o 'timeS*' | sed -e 's/time=//'
Jika Anda ingin awk segera mengeluarkan data yang disalurkan, Anda dapat menggunakan opsi -W interaktif.
ping -c 10 google.com | awk -W interactive '{ print $7 }'
Anda harus membaca halaman manual untuk aplikasi tersebut untuk mengetahui lebih lanjut.