Выход для вывода с символами новой строки

Я хотел бы сделать фиксированную высоту вывода из любой команды, используя трубопровод:

some_command | magic_command -40 

Если, например, some_command печатает 3 строки, magic_command должен добавить 37 новых строк,

или если some_command печатает 50 строк, magic_command должен сократить дополнительные строки (например, head -40)

3 Solutions collect form web for “Выход для вывода с символами новой строки”

POSIXly:

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

В системе GNU:

 { command; yes ""; } | head -n 40 

Использование awk:

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

Как это работает

  • -vc=40

    Это определяет количество строк, которые мы хотим.

  • NR>c{exit}

    Если мы напечатали больше, чем c строк, то выйдите.

  • 1

    Это критическая стенограмма awk для печати строки.

  • END{for (i=NR+1; i<=c; i++) print ""}

    Если мы дошли до конца ввода, продолжаем печатать пустые строки, пока не будем читать в общей сложности c строк вывода.

Примеры

Для иллюстрации мы сокращаем желаемый результат до пяти строк:

 $ seq 2 | awk -vc=5 'NR>c{exit} 1; END{for(i=NR+1;i<=c;i++)print""}' 1 2 $ seq 10 | awk -vc=5 'NR>c{exit} 1; END{for(i=NR+1;i<=c;i++)print""}' 1 2 3 4 5 

Можно использовать команду magic_command :

 #!/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 - - 
  • «-» отметить пустую строку (строки)
Linux и Unix - лучшая ОС в мире.