일부 대규모 데이터 세트를 반복하고 일부 긴 작업을 수행하는 스크립트가 있습니다. 그런 다음 sort | uniq -c
출력이 필요합니다 . 그래서 그것이 살아 있음을 알리기 위해 N 항목마다 stderr에 점을 인쇄합니다(매우 원시적인 의사 진행률 표시줄). 따라서 다음과 같이 보입니다.
for i in {1..100}; do
[[ $(( (i+=1) % 10)) -eq 0 ]] && echo -n "." >&2
shuf -i 1-10 -n1
sleep 0.1
done | sort | uniq -c
그리고 출력:
.......... 9 1
10 10
8 2
14 3
13 4
9 5
11 6
8 7
8 8
10 9
"진행률 표시줄"로 인해 출력이 약간 혼란스러워집니다. 그래서 궁금합니다.
- 플러시하기 전에 해당 stderr에 nweline을 추가하는 쉬운 방법이 있습니까? (어쩌면
echo >&2
그게 나에게 필요한 것일지도 모르지) - 아니면 삭제해?
물론 실제로는 WOW에 많은 항목이 있다는 사실을 모릅니다(적어도 기본적으로 제공되지는 않음). 그래서 이것이 스트림 리디렉션을 통해 달성될 수 있는지 궁금합니다.
답변1
루프를 중괄호(또는 괄호)로 묶고 그 안에 추가 에코를 넣습니다.
{ for i in {1..100}; do
[[ $(( (i+=1) % 10)) -eq 0 ]] && echo -n "." >&2
shuf -i 1-10 -n1
sleep 0.1
done; echo >&2; } | sort | uniq -c
전체 중괄호 그룹이 로 리디렉션되면 sort
계속 진행하려면 파일의 끝을 확인하기 전에 내부의 모든 항목이 종료될 때까지 기다려야 합니다. 이렇게 하면 sort
및 의 출력 전에 개행 문자가 인쇄됩니다 uniq
.