Anexar novas linhas ao fluxo, até que determinado número seja atingido

2

Estou usando este comando, que pesquisa pacman.log para pacotes atualizados hoje e os converte em uma string de 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}${goto 250}${color1}/' | tail -18

Com a cauda -18 o número máximo de linhas é 18.

Qual é a melhor maneira de acrescentar novas linhas para que o fluxo sempre tenha 18 linhas?

    
por Rua4da 27.10.2017 / 11:33

2 respostas

2

Você pode fazer (com um shell com suporte para a forma% z_de {x..y} da expansão de cinta como zsh , bash , ksh93 ou yash -o braceexpand ):

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

Note que ele preenche nova linha em vez de anexá-los. Para acrescentar, você poderia fazer:

your-command | tail -n 18 | awk '{print};END{while (NR++ < 18) print ""}'
    
por 27.10.2017 / 11:39
0

Com bash , você pode usar o loop de estilo c:

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

Mas onde você não tem bash , use awk Stéphane Chazelas sugere.

    
por 27.10.2017 / 11:58