이전 프로그램의 출력 줄 수를 계산합니다.

이전 프로그램의 출력 줄 수를 계산합니다.

특정 프로그램에서 생성된 출력 줄 수를 계산하려고 합니다. 문제는 프로그램을 실행하는 데 시간이 오래 걸리고 출력을 사용자에게 표시하고 싶다는 것입니다.마지막 명령으로 출력된 줄 수를 계산하는 방법이 있습니까?

이렇게 할 수는 있지만 program | wc -l사용자에게 출력이 표시되지는 않습니다. 내가 아는 한 이 작업을 수행해야 program; program | wc -l하지만 프로그램을 실행하는 데 최소 1분 정도 걸리므로 맨 아래에 행 수를 표시하기 위해 이 작업을 여러 번 수행할 필요는 없습니다.

편집하다:

  • 출력을 한 줄씩 표시한 다음 마지막에 개수를 반환하는 방법이 있습니까?

답변1

tee출력 스트림을 일반처럼 분할하여 하나의 복사본을 STDOUT으로 보내고 wc다른 하나는 STDOUT으로 보낼 수 있습니다 .

program | tee >(wc -l)

bash 구문은 >(cmd)실행하고 해당 비트를 프로그램의 STDIN(연결된 명명된 파이프) 경로로 바꾸는 것을 의미합니다 cmd.>(cmd)

답변2

한 가지 옵션은 계산을 수행하고 표준 출력으로 인쇄하는 awk를 사용하는 것입니다.

program | awk '{ print } END { print NR }'

여기서 awkNR은 현재 줄 번호입니다. Perl을 사용하여 동일한 작업을 수행할 수 있습니다.

program | perl -pe 'END {print "$.\n"}'

또는 sed:

program | sed -n 'p;$='

답변3

내가 가장 좋아하는 선택:

program | grep "" -c

답변4

늦을 수도 있습니다. 하지만 변수에서 개수를 캡처하는 방법에 대한 후속 질문을 해결하고 싶습니다.

이것이 당신이 원하는 것입니다 YOUR_VAR=$(PROGRAM | tee /dev/stderr | wc -l).

우리는 이를 활용하여 tee두 개의 스트림을 생성하고 하나는 /dev/stderr화면에 표시되는 로, 다른 하나는 wc -l행 수를 보고하는 로 전달합니다.

관련 정보