連続した標準出力の最後の行のみを取得する

連続した標準出力の最後の行のみを取得する

私はそれを使用しています男の名前内からネットワーク統計を収集します。wlp2s0インターフェイス(1秒間隔)は次のとおりです。

$ sar -n DEV 1 | grep wlp2s0

連続出力は次のとおりです。

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

.txtファイルに出力(現在の測定)の最後の行だけを書きたいです。問題は、これを行うコマンドを書く方法がわからないことです。

ファイルに書き込む唯一の方法(ファイルサイズが増え続けますが、これは私が望むものではありません)は次のことです。

$ sar -n DEV 1 > output.txt

標準出力は常に増加しており、ファイルが上書きされているため、前の行と前のすべての行が記録されます。

[編集]私の問題はこのツールに依存せず、連続出力を持つすべてのツールで発生します。循環バッファについて聞いたことがありますが、この場合は機能しないようです。

ベストアンサー1

これは、次のように出力ラインを繰り返し、各行を目的の出力ファイルに書き込むことによってシェル内で実行できます。

sar -n DEV 1 |
grep wlp2s0  |
while read ln
do
  printf '%s\n' "$ln" > output.txt
done

@OleTangeperlベースのソリューションはプロセス生成の面でより効率的ですが、シェルにprintfこの方法が組み込まれている場合はほとんど簡素化できます。

おすすめ記事