Preenchimento de saída com novas linhas

1

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)

    
por login 09.08.2016 / 19:59

3 respostas

4

POSIXly:

{ command; while :; do echo; done; } | head -n 40

No sistema GNU:

{ command; yes ""; } | head -n 40
    
por 09.08.2016 / 20:06
2

Usando o awk:

awk -v c=40 'NR>c{exit} 1; END{for(i=NR+1;i<=c;i++)print""}'

Como funciona

  • -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.

Exemplos

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
    
por 09.08.2016 / 20:13
1

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
-  
-  
  • «-» marca linha (s) vazia (s)
por 09.08.2016 / 22:02