여러 로그 파일이 있는 디렉터리를 사용하고 있습니다.
각 로그 파일에 기록된 줄 수의 실행 횟수(주기적으로 업데이트됨)를 표시하려고 합니다.
파일 이름별로 색인화되어 주기당(예: 초당) 각 파일에 기록된 줄 수를 확인해야 합니다.
보너스 포인트의 경우 행은 초당 작성된 행 수의 내림차순으로 정렬되어야 합니다.
반드시 그런 것을 사용할 필요는 없습니다 ncurses
(예: 상단). 매 주기(예: 매초)마다 업데이트를 작성하면 괜찮습니다.
이 작업을 어떻게 수행합니까?
내 솔루션을 답변으로 포함했지만 이 작업을 수행하는 더 좋은 방법이 있을 것 같습니다... 더 나은 방법을 배우고 싶습니다!
답변1
watch
나는 (읽기 ) 다음을 사용할 것이다 man watch
:
watch --differences wc -l *.log
답변2
강제 Unix 도구만 사용하는 무차별 대입 방법:
while :; do wc -l *; echo "-"; sleep 1; done |
awk '/^-/{print; next} {print $2, $1, $1-prev[$2]; prev[$2]=$1}'
위의 코드는 매초마다 각 파일 이름을 인쇄한 다음 파일의 현재 줄 수와 마지막 반복 이후 줄 수의 변경 사항을 인쇄합니다. 모든 파일의 총 라인 수에 대해 동일한 작업이 수행됩니다.
awk 출력을 적합하게 조정하려면 파이프를 통해 원하는 대로 정렬하고 각 호출 앞에 a를 추가할 수 있습니다 sort -k3,3n
(또는 awk가 a 다음의 첫 번째 줄을 읽을 때마다 awk에서 관련 이스케이프 시퀀스를 인쇄합니다). 각 루프의 전류 출력.tput clear;
wc -l
-
답변3
내가 생각할 수 있는 가장 좋은 방법은 다음 과 tail -f
함께 사용하는 것입니다.awk
logtop
:
tail -f * | awk '/^==> / {a=substr($0, 5, length-8); next} {print a}' | logtop