perl - 如何从示例列表中搜索第一个和最后一个匹配项
问题描述
我有一个来自我的应用程序的日志,如下所示:
{Fri Mar 16 19:07:47 Program: job-a: <blah><blah>
Fri Mar 16 19:07:47 Program: job-a: <blah><blah>
Fri Mar 16 19:07:48 Program: job-b: <blah><blah>
Fri Mar 16 19:07:48 Program: job-b: <blah><blah>
Fri Mar 16 19:07:50 Program: job-b: <blah><blah>
Fri Mar 16 19:07:51 Program: job-b: <blah><blah>
Fri Mar 16 19:07:52 Program: job-a: <blah><blah>
Fri Mar 16 19:07:52 Program: job-a: <blah><blah>
Fri Mar 16 19:07:53 Program: job-a: <blah><blah>
Fri Mar 16 19:07:54 Program: job-a: <blah><blah>
Fri Mar 16 19:07:55 Program: job-a: <blah><blah>
Fri Mar 16 19:08:00 Program: job-a: <blah><blah>
Fri Mar 16 19:08:01 Program: job-a: <blah><blah>
Fri Mar 16 20:33:52 Program: job-c: <blah><blah>
Fri Mar 16 20:45:56 Program: job-c: <blah><blah>}
对于本例中的每个作业名称 ( job-a
, job-b
, job-c
),我需要找到该行的第一次和最后一次出现以识别开始和结束时间。
即我需要输出程序/作业名称、start_time 和 end_time,如下面的示例输出所示。我已将预期输出显示为逗号分隔,但我并不真正关心分隔符,因为我只对值感兴趣。忽略示例输入/输出中开头和结尾的花括号。
job-a, Fri Mar 16 19:07:47, Fri Mar 16 19:08:01
job-b, Fri Mar 16 19:07:48, Fri Mar 16 19:07:51
job-c, Fri Mar 16 20:33:52, Fri Mar 16 20:45:56
解决方案
你可以这样做,awk
在这里我只是展示如何获得每项工作的第一次和最后一次出现。
awk '!first[$6]{ first[$6]=$4 } { last[$6]=$4 }
END{ for (x in last) print x, first[x], last[x] }' OFS=', ' infile
job-a:, 19:07:47, 19:08:01
job-b:, 19:07:48, 19:07:51
job-c:, 20:33:52, 20:45:56
推荐阅读
- react-native - 在 react-native 中创建刷卡动画?
- php - 为什么我的购物车没有显示产品?
- javascript - Vue:应用过滤器后如何清除过滤器?
- docker - Traefik v2:将 http://servername/foo 重定向到 http://servername:port
- android-databinding - Android Studio 不会创建绑定类
- logic - 将一阶逻辑 (FOL) 转换为 CNFFormula
- javascript - 两个数组的最小值以创建一个新数组
- c# - 从字符串中删除前导零
- reactjs - 带有 react-google-maps API 的谷歌地图
- java - 如何跳过某个数字并继续?