从输出命令中选择特定字段。

从输出命令中选择特定字段。
top -o %MEM -b > file.txt

time1 = 3 月 27 日 21:27:55

time2 = 3 月 28 日 20:27:32

我只需要将命令的输出重定向top -o %MEM -b到 output.txt

如果时间 1 <= 日期 1 < = 时间 2

其中time1,,time2date1我选择的日期!我可以使用 Unix 时间!

在 Linux Shell 中可以实现吗?

我该怎么做?我应该以 XML/JSON 格式保存信息,而不是 txt 文件!

答案1

现代 shell 是编程语言,因此您可以使用算术来检查日期条件。但是,top在批处理模式下,它会一直运行直到达到迭代限制,一旦启动top,就无法检查日期条件。因此,您必须top在迭代限制设置为 1 的情况下运行,然后在 while 循环中重新启动它:

#!/bin/bash
output_file="file.txt"
iteration_delay=5s
time1=1491004315
time2=3500000000
date1=`date +%s` #we initialize date1 with current unix time

while ((1)); do
    if (($time1 <= $date1 && $date1 <= $time2)); then
        top -o %MEM -b -n 1 >> $output_file
    fi
    sleep $iteration_delay
    # something should update date1, time1 or time2 here...?
done

编辑:要使用此脚本,请将其复制/粘贴到例如 mytop.sh 文件中,设置可执行文件在上面:

chmod +x mytop.sh

然后你可以像往常一样启动它,方法如下:

./mytop.sh

要取消,请按ctrl+ c

没有视觉指示器显示它正在运行,有些人在有输出时会感觉更好。如果您愿意,您可以添加例如:

echo .

脚本中一行接一行sleep,每次迭代时打印新的点。

相关内容