改行文字を使用したパッド出力

改行文字を使用したパッド出力

パイプを使ってすべてのコマンドで固定高さを出力したいです。

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}

    2行以上を印刷した場合は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
-  
-  
  • «-»は空行を表示します。

関連情報