POSIXly:
{ command; while :; do echo; done; } | head -n 40
No sistema GNU:
{ command; yes ""; } | head -n 40
Gostaria de fazer uma saída de altura fixa a partir de qualquer comando usando tubulação:
some_command | magic_command -40
Se, por exemplo, some_command imprimir 3 linhas, magic_command deve adicionar 37 novas linhas,
ou se algum_comando imprimir 50 linhas, magic_command deve cortar linhas extras (como a cabeça -40)
Usando o awk:
awk -v c=40 'NR>c{exit} 1; END{for(i=NR+1;i<=c;i++)print""}'
-v c=40
Isso define o número de linhas que queremos.
NR>c{exit}
Se tivermos impresso mais de c
linhas, saia.
1
Esta é uma abreviada enigmática do awk para imprimir a linha.
END{for (i=NR+1; i<=c; i++) print ""}
Se chegarmos ao final da entrada, continue imprimindo linhas em branco até lermos um total de c
linhas de saída.
Apenas para ilustração, encurtamos a saída desejada para cinco linhas:
$ 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
O magic_command pode ser seguido:
#!/bin/bash
#USAGE: Pass output of any command via ./magic.sh LINE_NUMBER
i=$1
while ((i--)) ; do
read && echo $REPLY || echo
done
Exemplos:
seq 4 | ./magic.sh 3
1
2
3
seq 4 | ./magic.sh 6
1
2
3
4
-
-