Bash Shell脚本:同时使用top命令和date命令

Bash Shell脚本:同时使用top命令和date命令,bash,shell,scripting,centos7,top-command,Bash,Shell,Scripting,Centos7,Top Command,我想在文件中打印一个进程的cpu使用率百分比(top命令)+此top命令获取信息的日期,每0.5秒打印一次(每行有日期+此cpu信息) 如果我用shell脚本编写,我会执行以下操作 while [ ! -f $STOP_FILE ] do echo "$(date +%s.%N)" >> $REPORT_FILE top -b -n 1 -p myProcessPID | grep myProcessName | awk -F " " '{print $12 "\t" $9}' &g

我想在文件中打印一个进程的cpu使用率百分比(top命令)+此top命令获取信息的日期,每0.5秒打印一次(每行有日期+此cpu信息) 如果我用shell脚本编写,我会执行以下操作

while [ ! -f $STOP_FILE ]
do
echo "$(date +%s.%N)" >> $REPORT_FILE
top -b -n 1 -p myProcessPID | grep myProcessName | awk -F " " '{print $12 "\t" $9}' >> result.txt
sleep 0.5
done
但是我不能使用top中的-n1选项来获取cpu信息,因为第一次迭代是如此,所以我需要其他迭代

因此,我正在寻找一些命令的组合,以便通过top命令+具有纳秒(date+%s.%N)的日期来获取流程信息(top命令也会在标题的第一行中生成一个时间,但我需要毫秒)

我在尝试类似的东西

echo $(date +%s.%N) $(top -d 0.5 -n 100 -p myProcessPID | grep myProcessName) >> results.txt
但日期仅在第一次迭代时打印

有什么想法吗


抱歉,如果我的问题不太准确,我对这个脚本和这里的写作是新手。

您可以通过管道将
top
的输出通过
awk
,并让
awk
运行
date
来实现这一点。例如:

top -d 0.5 -n 100 -p myProcessPID \
   | awk '/myProcessName/ { system("date +%s"); print $0 }'

您可以通过调整
awk
程序对输出的格式进行任意控制。还请注意,您不需要单独的
grep
,因为
awk
的内部模式匹配功能非常好。

如果您要求
top
在一次运行过程中在内部执行迭代,当然,也只有一次运行
date
。除非你有特定的原因,否则不要重新发明轮子-使用例如。时间戳输入
ts
实用程序是moreutils的一部分,它可以很好地用于此。这正是我想要的,谢谢!谢谢你的快速回复。