Estou usando o sar para coletar estatísticas de rede da minha interface wlp2s0 (intervalo de 1 segundo), assim:
$ sar -n DEV 1 | grep wlp2s0
e a saída contínua se parece com isso:
18:15:06 wlp2s0 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00
18:15:07 wlp2s0 1,00 2,00 0,12 0,28 0,00 0,00 0,00 0,00
18:15:08 wlp2s0 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00
18:15:09 wlp2s0 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00
18:15:10 wlp2s0 0,00 1,00 0,00 0,24 0,00 0,00 0,00 0,00
18:15:11 wlp2s0 0,00 1,00 0,00 0,24 0,00 0,00 0,00 0,00
Eu quero escrever apenas a última linha da saída (a medição atual) em um arquivo .txt. O problema é que não sei como construir um comando para fazer isso.
A única maneira de escrever em um arquivo (que está aumentando continuamente seu tamanho e não é isso que eu quero) é fazendo:
$ sar -n DEV 1 > output.txt
O stdout está sempre aumentando e, como estou substituindo o arquivo, todas as linhas anteriores e futuras serão gravadas.
[EDIT] Meu problema não depende dessa ferramenta (sar), aconteceu com qualquer ferramenta com saída contínua. Já ouvi falar de buffers circulares, mas acho que não funcionaria nesse caso.
Isso pode ser feito de dentro do shell, fazendo um loop nas linhas de saída e gravando cada linha no arquivo de saída desejado, assim:
A solução baseada em @OleTange
perl
pode ser mais eficiente em termos de criação de processos, mas se o seu shell tiver um embutido,printf
esse método pode ser quase tão enxuto.