用换行符填充输出

用换行符填充输出

我想使用管道从任何命令输出固定高度:

some_command | magic_command -40

例如,如果 some_command 打印 3 行,则 magic_command 应添加 37 个换行符,

或者如果 some_command 打印 50 行,magic_command 应该删除额外的行(如 head -40)

答案1

POSIXly:

{ 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}

    如果我们打印了多c行,则退出。

  • 1

    这是 awk 打印该行的神秘简写。

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

    如果我们已经到达输入的末尾,则继续打印空行,直到我们读取c输出的总行数。

例子

为了便于说明,我们将所需的输出缩短为五行:

$ 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
-  
-  
  • «-» 标记空行

相关内容