특정 프로그램에서 생성된 출력 줄 수를 계산하려고 합니다. 문제는 프로그램을 실행하는 데 시간이 오래 걸리고 출력을 사용자에게 표시하고 싶다는 것입니다.마지막 명령으로 출력된 줄 수를 계산하는 방법이 있습니까?
이렇게 할 수는 있지만 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 }'
여기서 awk
NR은 현재 줄 번호입니다. 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
행 수를 보고하는 로 전달합니다.