使用UNIX计算文本文件中2个字符串之间的字符串出现次数

时间:2013-08-14 01:00:32

标签: unix

我一直在研究这个问题并且无法找到解决方案。任何帮助,将不胜感激。我正在UNIX工作站上工作,并且有一个30-40 meg的文本文件,我正在使用它。在我的真实文件中有数百个工作。输入文件示例;

# 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   

再次感谢...

1 个答案:

答案 0 :(得分:0)

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

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

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