Saat berlari iw helpAnda melihat peringatan:
Jangan tidak screenscrape alat ini, kita tidak menganggap keluaran stabil.
Ada dua bagian di bawah ini: Pertama solusi untuk menghindari masalah Anda iwdan kedua jawaban untuk pertanyaan Anda. Keduanya bekerja dengan tradisional awkmaupun (default) GNU Awk.
Solusi untuk masalah Anda
Saya akan menggunakan iwconfigalih-alih iw:
while sleep 1; do
iwconfig wlan0 | awk -F'[ :=]+' '/Freq/{gsub("\\.","");f=$5}/Signal/{s=$7}END{print s","f}'
done >>log.csv
Keluaran
$ iwconfig wlan0 | awk -F'[ :=]+' '/Freq/{gsub("\\.","");f=$5}/Signal/{s=$7}END{print s","f}'
-44,2412
Catatan
Saya bingung apakah Anda ingin nilai dipisahkan oleh ,atau lebih tepatnya tab (yang akan menjadi \t), saya memilih ,tanpa dan ruang sekitarnya di sini. Jika itu bukan apa yang Anda diinginkannya hanya mengubah s","fsesuai, sadalah Signaldan fyang Frequencynilai di sana.
Saya juga memindahkan pengalihan, dengan cara ini file tidak harus dibuka pada setiap kali jalankan tetapi hanya sekali.
Penjelasan awkbagian
-F'[ :=]+'- set pembatas bidang yang berbeda, di sini untuk satu atau lebih ( +) dari tiga karakter yang terlampir dalam tanda kurung
/Freq/{gsub("\\.","");f=$5}- sesuai dengan "Frek", ganti setiap titik dengan tidak ada apa-apa (karena frekuensi dalam iwconfigoutput menggunakan titik sebagai pemisah ribuan) dan menyimpan konten kolom kelima dalam variabelf
/Signal/{s=$7} - sejalan dengan "Sinyal", simpan konten kolom ketujuh dalam variabel s
END{print s","f}- setelah memproses input, printvariabel sdan fdengan koma literal di antara mereka
Jawab pertanyaan Anda
while sleep 1; do
iw dev wlan0 link | awk '/freq/{f=$2};/signal/{s=$2}END{print s","f}'
done >>log.csv
Keluaran
$ iw dev wlan0 link | awk '/freq/{f=$2};/signal/{s=$2}END{print s","f}'
-43,2412
Penjelasan awkbagian
/freq/{f=$2}- sejalan dengan freq, simpan kolom kedua (spasi terpisah) dalam variabelf
/signal/{s=$2}- pada baris dengan signal, simpan kolom kedua dalam variabels
END{print s","f}- setelah memproses input, printvariabel sdan fdengan koma literal di antara mereka