파이프를 사용하여 모든 명령에서 고정 높이를 출력하고 싶습니다.
some_command | magic_command -40
예를 들어 some_command가 3줄을 인쇄한다면 Magic_command는 37개의 줄 바꿈을 추가해야 합니다.
또는 some_command가 50줄을 인쇄하면 Magic_command는 추가 줄을 삭제해야 합니다(예: head -40).
답변1
POSIX적으로:
{ command; while :; do echo; done; } | head -n 40
GNU 시스템에서:
{ command; yes ""; } | head -n 40
답변2
awk를 사용하세요:
awk -v c=40 'NR>c{exit} 1; END{for(i=NR+1;i<=c;i++)print""}'
어떻게 작동하나요?
-v c=40
이는 우리가 원하는 행 수를 정의합니다.
NR>c{exit}
두 줄 이상을 인쇄했다면
c
종료하세요.1
이것은 awk로 라인을 인쇄하는 데 대한 비밀스러운 약어입니다.
END{for (i=NR+1; i<=c; i++) print ""}
입력 끝에 도달하면
c
출력의 총 줄 수를 읽을 때까지 빈 줄을 계속 인쇄합니다.
예
설명을 쉽게 하기 위해 필요한 출력을 5줄로 줄였습니다.
$ seq 2 | awk -v c=5 'NR>c{exit} 1; END{for(i=NR+1;i<=c;i++)print""}'
1
2
$ seq 10 | awk -v c=5 'NR>c{exit} 1; END{for(i=NR+1;i<=c;i++)print""}'
1
2
3
4
5
답변3
이것마법의 명령다음을 수행할 수 있습니다.
#!/bin/bash
#USAGE: Pass output of any command via ./magic.sh LINE_NUMBER
i=$1
while ((i--)) ; do
read && echo $REPLY || echo
done
예:
seq 4 | ./magic.sh 3
1
2
3
seq 4 | ./magic.sh 6
1
2
3
4
-
-
- «-»는 빈 줄을 표시합니다.