将 sar 输出文本文件的最后一个条目解析为新的文本文件

Parsing the last entry of a sar output text file to a new text file

我希望能够使用 sar 收集系统 CPU 信息,并希望有一个文件包含所有收集的数据,第二个文件只存储最后一个条目。

下面的输出将是我的 measurements.txt 文件

14:54:45        CPU     %user     %nice   %system   %iowait    %steal     %idle
14:54:48        all      6.12      0.00     35.03      2.72      0.00     56.12
14:54:51        all      6.23      0.00     34.60      0.00      0.00     59.17
14:54:54        all      9.69      0.00     47.75      0.35      0.00     42.21
14:54:57        all      5.23      0.00     31.71      1.39      0.00     61.67
14:55:00        all      7.14      0.36     33.21      0.00      0.00     59.29
14:55:03        all      6.23      0.00     32.53      1.04      0.00     60.21
14:55:06        all      7.89      0.00     30.82      0.00      0.00     61.29
14:55:09        all      8.51      0.00     31.91      3.55      0.00     56.03

从 14:55:09 开始的最后一个条目将是我的 last_entry.txt 文件中的唯一条目。

然而,每当我尝试执行此操作时,我都无法从我的 last_entry.txt 文件中的 sar 命令获取最后一个条目。我已经能够将 sar 输出发送到 measurements.txt 文件,如示例所示,但这是我真正苦苦挣扎的最后一部分。

在一个阶段,我设法将一个输出输出到 last_entry.txt 文件,但它不是最后一个条目,所以我猜我的脚本的那部分可能只执行一次。问题是,我不知道如何让它连续获取最后一个条目,直到我取消它。

这是我的脚本代码,它将 sar 的输出发送到一个文本文件,然后将第一个条目而不是最后一个条目发送到第二个文件。

sar -u 3 > measurements.txt & tail -1 measurements.txt  > last_measurement.txt

问题出在 & 命令分隔符上。它会导致 sar 命令在后台执行 运行,而您在执行期间的某个不确定时间获取其输出文件的 current 最后一行。您希望 sar 完成,然后 运行 tail.

sar -u 3 > measurements.txt ; tail -1 measurements.txt  > last_measurement.txt

或更通俗地说就是

sar -u 3 > measurements.txt 
tail -1 measurements.txt  > last_measurement.txt

或与 tee 一起将其全部保存在一个管道中

sar -u 3 | tee measurements.txt | tail -n 1 >last_measurement.txt