10분마다 DSL 모뎀에서 통계를 수집하고 싶습니다. 많은 웹사이트에 따르면 이러한 목적으로 rrd를 사용하는 것이 가장 좋습니다. 내 모뎀(TD-W8968)은 SNMP를 사용할 수 없으므로 텔넷을 통해 통계를 가져오는 예상 스크립트를 작성했습니다. 수집된 crontab이 설정되었습니다. 내 문제는 일등석으로 불필요한 행을 잘라낸 후 통계 출력이 다음과 같다는 것입니다.
Status: Showtime
Last Retrain Reason: 0
Last initialization procedure status: 0
Max: Upstream rate = 1080 Kbps, Downstream rate = 11128 Kbps
Channel: FAST, Upstream rate = 512 Kbps, Downstream rate = 2048 Kbps
Link Power State: L0
Mode: G.DMT
TPS-TC: ATM Mode
Trellis: ON
Line Status: No Defect
Training Status: Showtime
Down Up
SNR (dB): 21.8 12.0
Attn(dB): 26.0 15.0
Pwr(dBm): 5.1 4.0
답변1
당신은 그것을 사용할 수 있습니다앗그러한 상황을 처리하기 위해. 예를 들어, 원본 파일에서 2개의 SNR 및 2개의 Attn 번호를 추출하여 rrd에 내림차순, 오름차순으로 공급하려면 다음을 수행하세요.
awk '/^SNR/ { snrdown = $3; snrup = $4; }
/^Attn/ { attndown = $2; attnup = $3; }
END { data = sprintf("N:%s:%s:%s:%s", snrdown, attndown, snrup, attnup);
system("rrdtool update " data " myrrdfile");
}' <rawfile
awk의 첫 번째 줄은 "SNR"로 시작하는 줄만 일치합니다. 기본적으로 awk는 줄을 공백으로 구분된 필드로 분할합니다. 필드 번호는 1부터 시작됩니다. 따라서 이 예에서 $3은 21.8의 필드입니다. 이 값은 임의로 이름이 지정된 변수에 보관됩니다.
마찬가지로 두 번째 awk 줄은 "Attn" 줄에만 일치하지만 해당 줄과 "(dB)" 사이에 공백이 없으므로 첫 번째 숫자는 $2 필드에 있습니다.
파일의 모든 행을 읽은 후 END 섹션을 완료하십시오 rawfile
. rrd에 대한 데이터 문자열을 생성합니다(N:21.8:26.0:...과 같은 것이 필요함). 형식 문자열의 각 요소는 %s
형식 뒤에 오는 변수 중 하나로 대체됩니다.
awk는 알아둘 가치가 충분히 있습니다. 매우 다양합니다.