将新行追加到流中,直到达到一定数量

将新行追加到流中,直到达到一定数量

我正在使用这个命令,它在 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 行的最佳方法是什么?

答案1

您可以执行以下操作(使用支持 zsh 的{x..y}大括号扩展形式的 shell,如、zsh或):bashksh93yash -o braceexpand

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

请注意,它前置换行而不是附加它们。要附加,您可以执行以下操作:

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

答案2

bash可以使用c风格的循环:

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

但如果您没有bash,请使用awkStéphane Chazelas 建议的方法。

相关内容