연속된 표준 출력의 마지막 줄만 가져오기

연속된 표준 출력의 마지막 줄만 가져오기

나는 그것을 사용하고 있다남자 이름내에서 네트워크 통계를 수집합니다.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 }'

관련 정보