Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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
使用UNIX计算文本文件中两个字符串之间字符串的出现次数_Unix - Fatal编程技术网

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

使用UNIX计算文本文件中两个字符串之间字符串的出现次数,unix,Unix,我已经为此工作了一段时间,但一直无法找到解决方案。任何帮助都将不胜感激。我在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

我已经为此工作了一段时间,但一直无法找到解决方案。任何帮助都将不胜感激。我在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   
再次感谢

awk '/^Job .* start$/ { jobname = $2; taskcount = 0; }
     /^Task start/    { taskcount++; }
     /^Job .* stop$/  { printf "Job %s, %d Tasks\n", jobname, taskcount; }'
这不会做很多检查(确保作业结束时是已启动的作业;检查每个已启动的任务是否已停止等),但它会处理您提供的数据并提供所需的输出


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

非常有效,谢谢。正是我需要的。