パイプを使ってすべてのコマンドで固定高さを出力したいです。
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
-
-
- «-»は空行を表示します。