awk 출력 (주기적이고 연속적인 입력)을 출력 파일로 파이프하는 방법은 무엇입니까?


10

내가 명령을 쓰기 위해 노력하고 있어요 그 파이프 a의 연속 출력 무료 특정 값 (사용 가능한 메모리) 구문 분석하고 타임 스탬프 파일에이를 출력하는 awk 명령에 대한 명령 (초마다 실행). 명령에 대한 현재 시도는 다음과 같습니다.

free -mto -s 1 | awk '/Mem/ { print strftime("%r") "," $4 }' >>memOut

또는 약간의 인터넷 검색 후

free -mto -s 1 | awk '/Mem/ { print strftime("%r") "," $4 >>"memOut"}'

각 실행은 빈 파일을 생성합니다. 어떤 제안이나 다른 방법이 있습니까?

답변:


13

memOut실행 중에 무언가를 보려면 버퍼를 플러시해야합니다 .

free -mto -s 1 | awk '/Mem/ { print strftime("%r") "," $4; fflush(stdout) }' >> memOut

대체 버전은 다음과 같습니다.

while sleep 1; do sed -n "s/MemFree: */`date`, /p" /proc/meminfo; done >> memOut

이것은 내가 원하는 출력 파일을 주었다. 감사합니다!
Mark

3

이전 버전의 경우을 awk사용해야 할 수도 있습니다 system("").

실제로 2012 년 12 월 이후 POSIX 표준 fflush(stdout)에서만 사용되는 최신 버전 awkgawk에 대해서만 사용됩니다.

free -mto -s 1 | awk '/Mem/ { 
    print strftime("%r") "," $4;
    system(""); # Flush output
}' >> memOut

system("")모든 파일 디스크립터 를 플러시 하는 방법 은 매뉴얼 "9.1.4 입력 / 출력 기능"섹션 에 설명 되어 gawk있습니다.


3

특정 버전 awk(예 : mawk 1.3.3) -W interactive에서는 파이프로 버퍼링되지 않은 작업을 수행 할 수 있도록 명령 줄 플래그를 추가해야합니다 .


2

구체적으로 요구 한 것이 아니라 실제로 원하는 것을 얻고 있는지 확인하십시오 .

프로그램의 시스템에서 사용 가능한 메모리를 알고 싶다면 더 적합 할 수 있습니다.

free -m -s 1 | awk '/buffers\/cache/ { print strftime("%r") "," $4; fflush(stdout) }' >> memOut

Mem line 's Used 열에는 캐시와 버퍼가 포함되며 대부분의 경우 주어진 컴퓨터 / 작업에 대한 메모리 사용량을 모니터링하려는 경우에는 반드시 언급해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.