Khi chạy iw help
bạn thấy một cảnh báo:
Đừng không bỏ màn hình công cụ này, chúng tôi không coi ổn định sản lượng của nó.
Có hai phần dưới đây: Đầu tiên là giải pháp cho vấn đề của bạn tránh iw
và thứ hai là câu trả lời cho câu hỏi của bạn. Cả hai đều hoạt động với truyền thống awk
cũng như (mặc định) GNU Awk
.
Giải pháp cho vấn đề của bạn
Tôi sẽ sử dụng iwconfig
thay vì iw
:
while sleep 1; do
iwconfig wlan0 | awk -F'[ :=]+' '/Freq/{gsub("\\.","");f=$5}/Signal/{s=$7}END{print s","f}'
done >>log.csv
Đầu ra
$ iwconfig wlan0 | awk -F'[ :=]+' '/Freq/{gsub("\\.","");f=$5}/Signal/{s=$7}END{print s","f}'
-44,2412
Ghi chú
Tôi đã bối rối liệu bạn có muốn các giá trị được phân tách bằng ,
hoặc đúng hơn là một tab (sẽ là \t
), tôi đã chọn ,
không có và không gian xung quanh ở đây. Nếu đó không phải là những gì bạn muốn chỉ cần thay đổi s","f
cho phù hợp, s
là Signal
và f
các Frequency
giá trị đó.
Tôi cũng đã chuyển hướng, theo cách này, tệp không phải được mở trong mỗi lần chạy mà chỉ một lần.
Giải thích về awk
phần
-F'[ :=]+'
- đặt một dấu phân cách trường khác nhau, ở đây thành một hoặc nhiều ( +
) của ba ký tự được đặt trong dấu ngoặc vuông
/Freq/{gsub("\\.","");f=$5}
- trong (các) dòng với Fre Freq, hãy thay thế mọi dấu chấm bằng không (vì tần số trong iwconfig
đầu ra sử dụng dấu chấm làm dấu phân cách hàng nghìn) và lưu nội dung của cột thứ năm vào biếnf
/Signal/{s=$7}
- trong (các) dòng có Tín hiệu Hồi, hãy lưu nội dung của cột thứ bảy trong biến s
END{print s","f}
- sau khi xử lý đầu vào, print
các biến s
và f
bằng dấu phẩy bằng chữ giữa chúng
Trả lời câu hỏi của bạn
while sleep 1; do
iw dev wlan0 link | awk '/freq/{f=$2};/signal/{s=$2}END{print s","f}'
done >>log.csv
Đầu ra
$ iw dev wlan0 link | awk '/freq/{f=$2};/signal/{s=$2}END{print s","f}'
-43,2412
Giải thích về awk
phần
/freq/{f=$2}
- trong (các) dòng với freq
, lưu cột thứ hai (khoảng cách được phân tách) trong biếnf
/signal/{s=$2}
- trong (các) dòng với signal
, lưu cột thứ hai trong biếns
END{print s","f}
- sau khi xử lý đầu vào, print
các biến s
và f
bằng dấu phẩy bằng chữ giữa chúng