特定の数に達するまでストリームに新しい行を追加します。

特定の数に達するまでストリームに新しい行を追加します。

私は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

次のことができます(または{x..y}zshの中括弧拡張形式をサポートするシェルを使用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

bashCスタイルループを使用できます。

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

ただし、そうでない場合は、Stéphane Chazelasが提案した方法をbash使用してください。awk

関連情報