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

时间:2015-01-28 15:33:51

标签: python bash sar

我希望能够使用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输出发送到measured.txt文件,如示例所示,但这是我真正努力的最后一部分。

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

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

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

1 个答案:

答案 0 :(得分:1)

问题在于&命令分隔符。它导致sar命令在后台运行,同时在执行期间的某个不确定时间获取其输出文件的当前最后一行。您希望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