iw dev wlan0 link
매 초마다 명령을 계속 실행 하고 출력을 csv
파일 로 저장하고 싶습니다 .
다음 명령을 사용하고 있습니다.
while sleep 1; do
iw dev wlan0 link | grep 'freq:\|signal' | awk '{printf "%s ", $2, $3}' >> log.csv
done
그러나 출력은 log.csv
다음과 같은 방식으로 저장됩니다 .
2412 -41 2412 -42 2412 -45 2412 -43
두 필드가 쉼표로 구분되어 (MS Excel과 같은 편집기의 별도 열에 표시됨) 각 줄이 새 줄로 출력되는 방식으로 출력을 저장하고 싶습니다. 는 log.csv
(당신은 그들이 단지 설명을위한 라벨을 무시할 수 있습니다) 다음과 같이한다
Signal Frequency
-41 2412
-42 2412
-45 2412
-43 2412
답변
실행할 때 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
는 IS Signal
와 가치가있다.
또한 리디렉션을 이동하여 각 실행에서 파일을 한 번만 열 필요는 없습니다.f
Frequency
awk
부품 설명
-F'[ :=]+'
–+
대괄호로 묶인 세 문자 중 하나 이상 ( )으로 다른 필드 구분 기호를 설정합니다./Freq/{gsub("\\.","");f=$5}
–“Freq”가있는 줄에서 모든 점을 아무것도 바꾸지 말고 (iwconfig
출력 의 주파수 가 점을 천 단위 구분 기호로 사용 하기 때문에 ) 다섯 번째 열의 내용을 변수에 저장하십시오f
/Signal/{s=$7}
–“Signal”이있는 행에서 일곱 번째 열의 내용을 변수에 저장하십시오.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
사이에 리터럴 쉼표가 있습니다.