Saat berlari iw help
Anda melihat peringatan:
Jangan tidak screenscrape alat ini, kita tidak menganggap keluaran stabil.
Ada dua bagian di bawah ini: Pertama solusi untuk menghindari masalah Anda iw
dan kedua jawaban untuk pertanyaan Anda. Keduanya bekerja dengan tradisional awk
maupun (default) GNU Awk
.
Solusi untuk masalah Anda
Saya akan menggunakan iwconfig
alih-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","f
sesuai, s
adalah Signal
dan f
yang Frequency
nilai di sana.
Saya juga memindahkan pengalihan, dengan cara ini file tidak harus dibuka pada setiap kali jalankan tetapi hanya sekali.
Penjelasan awk
bagian
-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 iwconfig
output 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, print
variabel s
dan f
dengan 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 awk
bagian
/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, print
variabel s
dan f
dengan koma literal di antara mereka