0

我已经为此工作了一段时间,但无法找到解决方案。任何帮助,将不胜感激。我在一个 UNIX 工作站上工作,并且有一个 30-40 兆的文本文件正在使用。在我的真实文件中有数百个工作。输入文件示例;

# misc logging data
Job 1 start  
Task  start  
Task  stop  
Task  start  
Task  stop  
Job 1 stop  
# Other misc logging data  
Job 2 start  
Task  start  
Task  stop  
Job 2 stop  
# Other misc logging data  
Job 3 start  
Task  start  
Task  stop  
Task  start  
Task  stop  
Task  start  
Task  stop  
Job 3 stop  

我想要的输出是:

Job 1, 2 Tasks  
Job 2, 1 Tasks  
Job 3, 3 Tasks   

再次感谢...

4

1 回答 1

0
awk '/^Job .* start$/ { jobname = $2; taskcount = 0; }
     /^Task start/    { taskcount++; }
     /^Job .* stop$/  { printf "Job %s, %d Tasks\n", jobname, taskcount; }'

这不会进行大量检查(确保作业结束是已启动的作业;检查每个已启动的任务是否已停止等),但它会处理您提供的数据并提供所需的输出。

如果“其他杂项记录数据”行可能包含与给定作业及其任务混淆的内容(可能与任务开始行等匹配),那么您必须更聪明一点。

于 2013-08-14T01:06:27.510 回答