Linux 需要一种方法来检查文件内容(时间数据)是否超过5分钟

Linux 需要一种方法来检查文件内容(时间数据)是否超过5分钟,linux,shell,unix,sh,ksh,Linux,Shell,Unix,Sh,Ksh,我正在创建一个脚本,以拉出服务器上cpu消耗量最高的作业列表。我以以下格式将进程转储到平面文件中: 202009080230,4.1218579,帕达蒙,02:30,00:00:01,SD_RCC_FRU:wf_RCC_ds_CRS_Facts SuspendeddDC_d.s_m_RCC_ds_Staging_Dimension_Facts SuspendeddDC_ipi_d 第二个数据点(4.1)是我的cpu利用率,而第六个数据点是所花费的时间(00:00:01) 我打算仅筛选出此文件中大

我正在创建一个脚本,以拉出服务器上cpu消耗量最高的作业列表。我以以下格式将进程转储到平面文件中:

202009080230,4.1218579,帕达蒙,02:30,00:00:01,SD_RCC_FRU:wf_RCC_ds_CRS_Facts SuspendeddDC_d.s_m_RCC_ds_Staging_Dimension_Facts SuspendeddDC_ipi_d

第二个数据点(4.1)是我的cpu利用率,而第六个数据点是所花费的时间(00:00:01)

我打算仅筛选出此文件中大于75%且运行时间超过00:05:00(即5分钟)的条目。我写了一个if逻辑,如下所示:

var10=`ls -lrt /projects/Informatica/INFA_ADMIN/LogFiles/myfile.txt |awk '{ print $9 }'`
sed -i 's/ /,/g' $var10
for i in `cat $var10`
do
var12=`echo $i |cut -d',' -f2`
var16=`echo $i |cut -d',' -f6`
if [ $var12 -ge 75.0 ] && ("$var16" > "00:05:00");
then
<logic>
fi
done
var10=`ls-lrt/projects/Informatica/INFA_ADMIN/LogFiles/myfile.txt | awk'{print$9}'`
sed-i's/,/g'$var10
因为我是猫$10`
做
var12=`echo$i | cut-d','-f2`
var16=`echo$i | cut-d','-f6`
如果[$var12-ge 75.0]&&($var16”>“00:05:00”);
然后
fi
完成
该脚本能够识别占用超过75.0 cpu但在第二种情况下失败的进程

[136-ge 75.0] 00:20:26 1> 00:05:00 cpu_report_email_prateek_test.sh[63]:00:20:26:找不到[没有这样的文件或目录]
您能否指导如何解决此问题?

您的
&
表达式的RHS将展开
$var16
,并尝试执行结果,将输出重定向到文件
00:05:00
。替换为
[$x-gt$y]
。要进行数字比较,您需要直接的数字(无“:”字符)。您可以将hh:mm:ss修改为总秒数,然后进行比较。

首先,我知道在第1行中,您试图获取最新的文件。我希望创建的文件始终使用相同的名称,然后在脚本末尾,在处理它之后,使用另一个名称(如myfile.txt.20200101)。所以你总是知道myfile.txt是最新的。比做ls更有效。然后,你可以用:(这是第一个字母,不是字母“l”)来改进你的台词

从第2行开始,我假设原始文件是以空格分隔的。事实上,您可能会利用这一点,而不是添加逗号。此外,使用带有“cat”的for循环比使用while循环性能差。对于时间比较,我会使用一个小技巧。转换你们的阈值和读数,在第二个自纪元,然后比较它们

MyTreshold=$(date -d 00:05:00 +"%s")    
while read -r line; do
        MyArray=( $line )
        MyReading=$(date -d ${MyArray[5]} +"%s")
        #the array starts a index 0
        if [[ ${MyArray[1]} -ge 75 && $MyReading -gt $MyThreshold ]]; then
           <LOGIC>
        fi
done <$var10
MyTreshold=$(日期-d00:05:00+%s)
而read-r行;做
MyArray=($line)
MyReading=$(日期-d${MyArray[5]}+%s)
#数组开始索引0
如果[${MyArray[1]}-ge 75&&$MyReading-gt$MyThreshold]];然后
fi

做得很有魅力。感谢分享提高脚本性能的良好实践。
MyTreshold=$(date -d 00:05:00 +"%s")    
while read -r line; do
        MyArray=( $line )
        MyReading=$(date -d ${MyArray[5]} +"%s")
        #the array starts a index 0
        if [[ ${MyArray[1]} -ge 75 && $MyReading -gt $MyThreshold ]]; then
           <LOGIC>
        fi
done <$var10