เมื่อใช้งานiw help
คุณจะเห็นคำเตือน:
อย่าไม่ screenscrape เครื่องมือนี้เราไม่ได้พิจารณาเสถียรภาพเอาท์พุท
มีสองส่วนด้านล่าง: แรกแก้ปัญหาของคุณหลีกเลี่ยงiw
และสองคำตอบสำหรับคำถามของคุณ ทั้งสองทำงานร่วมกับแบบดั้งเดิมawk
เช่นเดียวกับ GNU Awk
(เริ่มต้น)
วิธีแก้ไขปัญหาของคุณ
ฉันจะใช้iwconfig
แทนiw
:
while sleep 1; do
iwconfig wlan0 | awk -F'[ :=]+' '/Freq/{gsub("\\.","");f=$5}/Signal/{s=$7}END{print s","f}'
done >>log.csv
เอาท์พุต
$ iwconfig wlan0 | awk -F'[ :=]+' '/Freq/{gsub("\\.","");f=$5}/Signal/{s=$7}END{print s","f}'
-44,2412
หมายเหตุ
ฉันสับสนว่าคุณต้องการค่าคั่นด้วย,
หรือมากกว่าแท็บ (ซึ่งจะเป็น\t
) ฉันเลือก,
โดยไม่ต้องและช่องว่างโดยรอบที่นี่ หากที่ไม่สิ่งที่คุณต้องการเพียงแค่เปลี่ยนs","f
ตามs
เป็นSignal
และค่ามี
ฉันยังย้ายการเปลี่ยนเส้นทางด้วยวิธีนี้ไฟล์ไม่จำเป็นต้องเปิดในแต่ละครั้ง แต่เพียงครั้งเดียวf
Frequency
คำอธิบายของawk
ส่วน
-F'[ :=]+'
- ตั้งค่าตัวคั่นฟิลด์อื่นที่นี่เป็นหนึ่งหรือมากกว่า ( +
) ของอักขระสามตัวที่อยู่ในวงเล็บเหลี่ยม
/Freq/{gsub("\\.","");f=$5}
- ในบรรทัดด้วย“ Freq” แทนที่ทุกจุดโดยไม่มีอะไร (เพราะความถี่ในiwconfig
เอาต์พุตใช้จุดเป็นตัวคั่นหลักพัน) และบันทึกเนื้อหาของคอลัมน์ที่ห้าในตัวแปรf
/Signal/{s=$7}
- ในบรรทัดที่มี“ สัญญาณ” ให้บันทึกเนื้อหาของคอลัมน์ที่เจ็ดในตัวแปร s
END{print s","f}
- หลังจากประมวลผลอินพุตprint
ตัวแปรs
และf
เครื่องหมายจุลภาคระหว่างตัวอักษร
ตอบคำถามของคุณ
while sleep 1; do
iw dev wlan0 link | awk '/freq/{f=$2};/signal/{s=$2}END{print s","f}'
done >>log.csv
เอาท์พุต
$ iw dev wlan0 link | awk '/freq/{f=$2};/signal/{s=$2}END{print s","f}'
-43,2412
คำอธิบายของawk
ส่วน
/freq/{f=$2}
- ในบรรทัดที่มีfreq
ให้บันทึกคอลัมน์ที่สอง (คั่นด้วยช่องว่าง) ในตัวแปรf
/signal/{s=$2}
- ในบรรทัดที่มีsignal
ให้บันทึกคอลัมน์ที่สองในตัวแปรs
END{print s","f}
- หลังจากประมวลผลอินพุตprint
ตัวแปรs
และf
เครื่องหมายจุลภาคระหว่างตัวอักษร