`wc -l`을 실시간으로 업데이트하는 방법은 무엇입니까?

`wc -l`을 실시간으로 업데이트하는 방법은 무엇입니까?

<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 환경은 기본이 아닌 간격을 지속적으로 설정하는 데 사용할 수 있습니다(동일한 규칙 및 형식에 따라).

관련 정보