GNU/Linux >> Belajar Linux >  >> Linux

Proses Setiap Baris Output Dari `ping` Segera Di Pipeline?

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.


Linux
  1. Output Dari Ls Memiliki Baris Baru Tapi Ditampilkan Pada Satu Baris. Mengapa?

  2. Mengarahkan Output Subkulit ke Proses?

  3. Linux – Bagaimana Cara Mengalihkan Perangkat Output Pulseaudio Dari Baris Perintah dengan Kuat?

  1. Bash Script:Bagaimana Menetapkan Setiap Baris Perintah Output Ke Nilai Dalam Array?

  2. Mengulangi setiap baris keluaran ls -l

  3. Di shell Linux, bagaimana saya bisa memproses setiap baris dari string multiline?

  1. Menghilangkan baris pertama dari keluaran perintah Linux mana pun

  2. Bagaimana cara menghitung jumlah tab di setiap baris menggunakan skrip shell?

  3. Bagaimana cara mendapatkan PID induk dari proses yang diberikan di GNU/Linux dari baris perintah?