Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以在bash中按给定日期对进程进行排序?_Bash_Date_Terminal_Jobs_Ps - Fatal编程技术网

是否可以在bash中按给定日期对进程进行排序?

是否可以在bash中按给定日期对进程进行排序?,bash,date,terminal,jobs,ps,Bash,Date,Terminal,Jobs,Ps,我所要做的就是按输入日期对流程进行排序。 以下是我保存日期的方式: #!/bin/bash echo "Insert the date yyyy-mm-dd" read a if ! [[ $date =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]] then echo "Date is not valid" elif b=`date --date=$a '+%Y-%m-%d'` then ???? fi 如何显示当前的流程?谢谢。您可以指定格式化程序并使用lstart,

我所要做的就是按输入日期对流程进行排序。 以下是我保存日期的方式:

#!/bin/bash
echo "Insert the date yyyy-mm-dd"
read a
if ! [[ $date =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]
then echo "Date is not valid"
elif b=`date --date=$a '+%Y-%m-%d'`
then 
????
fi

如何显示当前的流程?谢谢。

您可以指定格式化程序并使用
lstart
,如下命令:

ps -eo lstart,pid,cmd
上面的命令将输出所有进程,使用格式化程序获取日期+时间、PID启动和命令运行,但我已将日期格式更改为与日期输入对齐

这就是你想要的:

#!/bin/bash
declare -A MONTHS
#months Dictionary

MONTHS[01]=Jan
MONTHS[02]=Feb
MONTHS[03]=Mar
MONTHS[04]=Apr
MONTHS[05]=May
MONTHS[06]=Jun
MONTHS[07]=Jul
MONTHS[08]=Aug
MONTHS[09]=Sep
MONTHS[10]=Oct
MONTHS[11]=Nov
MONTHS[12]=Dec

echo "Insert the date yyyy-mm-dd"
IFS="-" read -a val

if [[ "${val[0]}-${val[1]}-${val[2]}" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]
then
    echo "Date is valid!!"
    ps -eo lstart,pid,cmd --sort=start_time | \
    awk {'print $5 "-" $2 "-" $3 " " $6 " " $7'} | \
    grep "${val[0]}-${MONTHS[${val[1]}]}-${val[2]}"

else
    echo "Date is not valid"
fi
输出样本:

2020-May-19 23 [crypto]
2020-May-19 230 [scsi_tmf_27]
2020-May-19 231 [scsi_eh_28]
2020-May-19 232 [scsi_tmf_28]
2020-May-19 233 [scsi_eh_29]
2020-May-19 234 [scsi_tmf_29]
2020-May-19 235 [scsi_eh_30]
2020-May-19 236 [scsi_tmf_30]
2020-May-19 237 [scsi_eh_31]
2020-May-19 238 [scsi_tmf_31]
2020-May-19 239 [scsi_eh_32]
2020-May-19 2390 /usr/lib/deja-dup/deja-dup-monitor

您可以指定格式化程序并使用
lstart
,如以下命令:

ps -eo lstart,pid,cmd
上面的命令将输出所有进程,使用格式化程序获取日期+时间、PID启动和命令运行,但我已将日期格式更改为与日期输入对齐

这就是你想要的:

#!/bin/bash
declare -A MONTHS
#months Dictionary

MONTHS[01]=Jan
MONTHS[02]=Feb
MONTHS[03]=Mar
MONTHS[04]=Apr
MONTHS[05]=May
MONTHS[06]=Jun
MONTHS[07]=Jul
MONTHS[08]=Aug
MONTHS[09]=Sep
MONTHS[10]=Oct
MONTHS[11]=Nov
MONTHS[12]=Dec

echo "Insert the date yyyy-mm-dd"
IFS="-" read -a val

if [[ "${val[0]}-${val[1]}-${val[2]}" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]
then
    echo "Date is valid!!"
    ps -eo lstart,pid,cmd --sort=start_time | \
    awk {'print $5 "-" $2 "-" $3 " " $6 " " $7'} | \
    grep "${val[0]}-${MONTHS[${val[1]}]}-${val[2]}"

else
    echo "Date is not valid"
fi
输出样本:

2020-May-19 23 [crypto]
2020-May-19 230 [scsi_tmf_27]
2020-May-19 231 [scsi_eh_28]
2020-May-19 232 [scsi_tmf_28]
2020-May-19 233 [scsi_eh_29]
2020-May-19 234 [scsi_tmf_29]
2020-May-19 235 [scsi_eh_30]
2020-May-19 236 [scsi_tmf_30]
2020-May-19 237 [scsi_eh_31]
2020-May-19 238 [scsi_tmf_31]
2020-May-19 239 [scsi_eh_32]
2020-May-19 2390 /usr/lib/deja-dup/deja-dup-monitor


好的,除非您的操作系统周期性地将进程列表保存到您的代码中可能不相同的地方,否则没有命令可以替换
?你到底想分类什么?我在您的代码中没有看到任何尝试排序的内容。@oguzismail我认为它不会这样做。。那么您正在查找甚至不存在的内容。您可以编写一个程序,定期将进程列表保存到一个文件中,然后您就可以使用它做任何您想做的事情logs@jordanm你是对的。既然你提到了这件事,我不知道我为什么这么做。您看不到任何尝试的排序,因为我没有尝试具体地对它们进行排序,而是显示它们是否在该日期开始。我觉得我说不清楚,因为我不太明白这个任务。我四处打听过,但没有用。任务如下:一个shell脚本,显示在特定日期在后台启动的进程。日期是一个位置参数。谢谢您的时间。AFAIK,除非您的操作系统定期将进程列表保存到您的代码中可能与
b
a
不相同的地方,否则没有命令可以替换该
?你到底想分类什么?我在您的代码中没有看到任何尝试排序的内容。@oguzismail我认为它不会这样做。。那么您正在查找甚至不存在的内容。您可以编写一个程序,定期将进程列表保存到一个文件中,然后您就可以使用它做任何您想做的事情logs@jordanm你是对的。既然你提到了这件事,我不知道我为什么这么做。您看不到任何尝试的排序,因为我没有尝试具体地对它们进行排序,而是显示它们是否在该日期开始。我觉得我说不清楚,因为我不太明白这个任务。我四处打听过,但没有用。任务如下:一个shell脚本,显示在特定日期在后台启动的进程。日期是一个位置参数。谢谢你的时间,我的天!这个练习让我头疼得要命。真是太感谢你了!我真的很感谢你的帮助。然而,我不明白你在那里所做的一切——这里没有,记得吗?:)。那么,你能解释一下awk命令中的所有数字是怎么回事吗?此外,如果它们前面有$符号,这是否意味着它们是位置参数?是的,它们是,因此如果运行此命令
ps-eo lstart,pid,cmd
,您将看到每行的输出格式如下
Tue May 19 15:41:12 2020 8339[jfsIO]
,我刚刚使用awk将它们映射为
2020-May-19 8339[jfsIO]
注意:您可以使用“`@MahmoudOdeh”将shell命令拆分为多行,因为您已经在调用
read
,也可以基于
-
作为字段分隔符将输入拆分为数组,如:
IFS=“-”read-a val
。现在可以使用
${val[0]}、${val[1]}、${val[2]}
代替范围参数expansion@SiegeX你的方法比我的更好,可读性更强,我会立即更新答案,我的上帝!这个练习让我头疼得要命。真是太感谢你了!我真的很感谢你的帮助。然而,我不明白你在那里所做的一切——这里没有,记得吗?:)。那么,你能解释一下awk命令中的所有数字是怎么回事吗?此外,如果它们前面有$符号,这是否意味着它们是位置参数?是的,它们是,因此如果运行此命令
ps-eo lstart,pid,cmd
,您将看到每行的输出格式如下
Tue May 19 15:41:12 2020 8339[jfsIO]
,我刚刚使用awk将它们映射为
2020-May-19 8339[jfsIO]
注意:您可以使用“`@MahmoudOdeh”将shell命令拆分为多行,因为您已经在调用
read
,也可以基于
-
作为字段分隔符将输入拆分为数组,如:
IFS=“-”read-a val
。现在可以使用
${val[0]}、${val[1]}、${val[2]}
代替范围参数expansion@SiegeX你的方法比我的更好,可读性更强,我现在将更新答案