Linux

將新行追加到流中,直到達到一定數量

  • October 27, 2017

我正在使用這個命令,它在 pacman.log 中搜尋今天更新的軟體包並將它們轉換為一個 conky 字元串:

tail -500 /var/log/pacman.log | grep -e "\[$(date +"%Y-%m-%d") [0-5][0-9]:[0-9][0-9]\] \[ALPM\] upgraded" | sed 's/^.*\([0-2][0-9]:[0-5][0-9]\).*upgraded \([^ ]*\).*/${color2}\2${goto 250}${color1}\1/' | tail -18

使用 tail -18 時,最大行數為 18。

追加新行以使流始終有 18 行的最佳方法是什麼?

您可以這樣做(使用支持 zsh{x..y}形式的大括號擴展的 shell,如、zsh或):bash``ksh93``yash -o braceexpand

{
 printf '%.0s\n' {1..18}
 your-command
} | tail -n 18

請注意,它預先添加換行符而不是附加它們。要追加,您可以執行以下操作:

your-command | tail -n 18 | awk '{print};END{while (NR++ < 18) print ""}'

你可以使用bashc 風格的循環:

other_command | for((i=0;i<18;i++)); do IFS= read -r line; printf '%s\n' "$line";done

但是在你沒有的地方bash,使用awkStéphane Chazelas 建議。

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