나는 그것을 사용하고 있다남자 이름내에서 네트워크 통계를 수집합니다.wlp2s0인터페이스(1초 간격)는 아래와 같습니다.
$ sar -n DEV 1 | grep wlp2s0
연속 출력은 다음과 같습니다.
18:15:06 wlp2s0 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00
18:15:07 wlp2s0 1,00 2,00 0,12 0,28 0,00 0,00 0,00 0,00
18:15:08 wlp2s0 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00
18:15:09 wlp2s0 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00
18:15:10 wlp2s0 0,00 1,00 0,00 0,24 0,00 0,00 0,00 0,00
18:15:11 wlp2s0 0,00 1,00 0,00 0,24 0,00 0,00 0,00 0,00
.txt 파일에 출력(현재 측정)의 마지막 줄만 쓰고 싶습니다. 문제는 이 작업을 수행하는 명령을 작성하는 방법을 모른다는 것입니다.
파일에 쓸 수 있는 유일한 방법(파일 크기가 계속 증가하는데 이는 내가 원하는 것이 아님)은 다음을 수행하는 것입니다.
$ sar -n DEV 1 > output.txt
표준 출력은 항상 증가하고 있으며 파일을 덮어쓰고 있기 때문에 이전 줄과 앞으로 나올 모든 줄이 기록됩니다.
[편집] 내 문제는 이 도구(sar)에 의존하지 않으며 연속 출력이 있는 모든 도구에서 발생합니다. 순환 버퍼에 대해 들어본 적이 있지만 이 경우에는 작동하지 않을 것 같습니다.
답변1
이는 다음과 같이 출력 라인을 반복하고 각 라인을 원하는 출력 파일에 작성하여 셸 내에서 수행할 수 있습니다.
sar -n DEV 1 |
grep wlp2s0 |
while read ln
do
printf '%s\n' "$ln" > output.txt
done
@OleTange perl
기반 솔루션은 프로세스 생성 측면에서 더 효율적일 수 있지만 쉘에 printf
이 방법이 내장되어 있으면 거의 간소화될 수 있습니다.
답변2
sar -n DEV 1 |
perl -ne 'if(/wlp/) { open(O,">current"); print O; close O }'