<streaming ls> | wc -l
제대로 작동하는 명령이 있지만 <streaming ls>
시간이 좀 걸립니다. 즉, 몇 분 후에야 최종 행 수를 얻을 수 있습니다.
wc -l
실시간으로 업데이트 출력을 얻을 수 있는 방법이 있나요?
답변1
이 목적 으로 사용할 수는 없지만 wc -l
다른 도구(예: AWK)를 사용하여 표시되는 행의 누적 개수를 생성할 수 있습니다.
<streaming ls> | awk '{ printf "%d\r", NR } END { print NR }'
이는 행이 표시될 때마다 표시되는 행 수를 업데이트하고 프로세스가 끝날 때 총 행 수로 끝납니다.
출력량이 많은 명령의 경우 각 명령을 인쇄하여 오버헤드를 줄일 수 있습니다.N선:
… | awk 'NR % 10 == 0 { printf "%d\r", NR } END { print NR }'
(을 위한N= 10) 또는 매초마다 인쇄합니다.
… | awk 'systime() > lasttime { lasttime = systime(); printf "%d\r", NR } END { print NR }'
(또는 매N조건을 >= lasttime + n
)초로 변경합니다.
답변2
이를 사용하여 pv
진행 상황 보고서를 제공할 수 있습니다.
cmd | pv -lbtr | wc -l
-l
라인 기반(바이트 수가 아닌 라인 수를 보고함)-b
바이트 수를 보고합니다. (때문에 여기에 행이 있습니다-l
)-t
소요 시간 보고-r
현재 속도(초당 라인 수,-a
평균 속도 참조)를 보고합니다.
파일 이름은 여러 줄로 구성될 수 있으므로 또는 또는 같은 옵션을 사용하여 파일 이름에서 줄 바꿈을 이스케이프 처리 하지 않으면 의 wc -l
출력에서 ls
파일 수를 제공하는 것이 보장되지 않습니다 .-b
-q
\n
?
답변3
글쎄, 나는 비슷한 것을 사용했지만 watch -n 1 your command
이것이 귀하의 경우에 어떤 용도로 사용되는지 확실하지 않습니다. 나는 전문가가 아니며 내 마음에 가장 먼저 떠오르는 것입니다.
https://man7.org/linux/man-pages/man1/watch.1.html
watch - 주기적으로 프로그램을 실행하고 출력을 전체 화면에 표시합니다.
-n, --interval 초는 업데이트 간격을 지정합니다. 이 명령은 더 작은 값이 변환되는 0.1초보다 작은 간격을 허용하지 않습니다. 둘 다'. '및','은 모든 로케일에서 작동합니다. WATCH_INTERVAL 환경은 기본이 아닌 간격을 지속적으로 설정하는 데 사용할 수 있습니다(동일한 규칙 및 형식에 따라).