Linux 打印具有最长执行时间的recordId的Shell脚本
给定一个如下的日志文件,其中可能有100条这样的记录,我们需要使用执行时间最高的shell脚本来查找recordId: 文件示例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 提前谢
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