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
,,time2
是date1
我选择的日期!我可以使用 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
,每次迭代时打印新的点。