Command-Line

用換行符填充輸出

  • August 9, 2016

我想使用管道從任何命令進行固定高度輸出:

some_command | magic_command -40

例如,如果 some_command 列印 3 行,magic_command 應該添加 37 個換行符,

或者如果 some_command 列印 50 行,magic_command 應該刪除額外的行(如 head -40)

POSIXly:

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

在 GNU 系統上:

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

使用 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

引用自:https://unix.stackexchange.com/questions/302361