Command-Line
用換行符填充輸出
我想使用管道從任何命令進行固定高度輸出:
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