Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.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
Linux 打印具有最长执行时间的recordId的Shell脚本_Linux_Bash_Shell_Unix_Awk - Fatal编程技术网

Linux 打印具有最长执行时间的recordId的Shell脚本

Linux 打印具有最长执行时间的recordId的Shell脚本,linux,bash,shell,unix,awk,Linux,Bash,Shell,Unix,Awk,给定一个如下的日志文件,其中可能有100条这样的记录,我们需要使用执行时间最高的shell脚本来查找recordId: 文件示例 recordid=11 time=123ms date=today recordid=12 time=11ms date=yesterday recordid=13 time=800ms date=yesterday2 recordid=14 time=22ms date=today2 提前谢

给定一个如下的日志文件,其中可能有100条这样的记录,我们需要使用执行时间最高的shell脚本来查找recordId:

文件示例

recordid=11   
time=123ms   
date=today   

recordid=12   
time=11ms    
date=yesterday

recordid=13  
time=800ms  
date=yesterday2   

recordid=14   
time=22ms    
date=today2    
提前谢谢!
皮尤斯

你能试试下面用展示的样品写的吗。在计算机上编写并测试

cat记录| cut-d'='-f2 |忽略键,只需要值 tr'\n'| sed's/\n/g'| tr-d |记录行 tr-s''|正则化线 sed's/ms/'|不需要这些装置 sort-k2-n |按第二列作为数字排序 尾部-n1 |取最后一个,即最高 cut-d'-f1获取第一个值,即ID 你可以用awk做这个

输出:

recordid=13  
time=800ms  
date=yesterday2   
输入文件每个段落有一条记录,我们用RS表示= 第二个字段的substr将类似于800ms,因此为了仅获得数值,我们使用+0。 请注意,您的记录的所有时间都应以毫秒为单位,否则您不仅要检查数字,还要检查单位。

如果您进入管道:

cut-d=-f2文件| awk'$1=$1'RS=OFS=,| sort-t','-k2n,2 | tail-1 | cut-d,-f1 使用空RS,您可以轻松完成:

awk -F= -v RS= '$3 == "time" && max < ($4+0){max = ($4+0); s=$0} END{print s}' file

您可以:首先将其转换为类似TSV的文件。阅读4行,在=之前删除零件,并在它们之间用制表符输出。你可以用awk,bash,sed来做。一旦你有了TSV ish格式,它就很简单了——在第二列按数字排序并输出第一行/最后一行。你只需要一个记录ID还是整个记录?旁注,专业提示:|忽略以下换行和注释,你不需要在第二行使用“\”,你的多行版本可能就可以工作了,只需替换-for注释,并在命令末尾添加|。如果您不需要最大值,那么您可以删除END block语句中的最大值,它将只打印记录ID占用的最大时间。非常感谢@vgersh99,您能帮助我理解,2 In-k2n,2-k2n,2-2 n的意义吗。2
recordid=13  
time=800ms  
date=yesterday2   
awk -F= -v RS= '$3 == "time" && max < ($4+0){max = ($4+0); s=$0} END{print s}' file
recordid=13
time=800ms
date=yesterday2