繁体   English   中英

使用awk解析大型测试文件

[英]Parse the large test files using awk

我正在寻找使用awk解析以空格分隔的输入文本文件。 每个组的列代码可以有多于一行。 我将不胜感激与此有关的任何帮助。

输入文件:

TR 1   
Action   

Success/Failure 
8.1.1.1   RunOne   80   48
8.1.1.2   RunTwo   80   49
8.1.1.3   RunThree   100   100
8.1.1.4   RunFour   20   19
8.1.1.5   RunFive   20   20
Action Time   16:47:42
Action2   

Success/Failure 
8.1.2.1   RunSix   80   49
8.1.2.2   RunSeven   80   80
8.1.2.3   RunEight   80   80
Action2 Time   03:26:31

TR 2    
Action

Success/Failure
8.1.1.1   RunOne   80   48
8.1.1.2   RunTwo   80   49
8.1.1.3   RunThree   100   100
8.1.1.4   RunFour   20   19
8.1.1.5   RunFive   20   20
Action Time   16:47:42
Action2   

Success/Failure 
8.1.2.1   RunSix   80   49
8.1.2.2   RunSeven   80   80
8.1.2.3   RunEight   80   80
Action2 Time   03:26:31

所需的输出文件

------------------
s.no  Runno   Runname val1 val2  %val1&val2
1.    8.1.1.1 Runone  160  96    %       #val1 and Val2 should display as sum of TR1&TR2
2.    8.1.1.2 Runtwo  160  98
3.    8.1.1.3 Runthree 200 200
4.    8.1.1.4 RunFour 40 38
....... 

并从每个TR 1(TestRun)中找到每个Runname的出现次数

代码如下

#!/usr/bin/awk -f

BEGIN {
    # You can customize this to change your output layout based on your preference.
    format = "%-10s%-7s%-5s%-8s\n”
    printf format, “Runno”, “Runname”, “Val1”, “Val2”
}
++i==2{
    l = $1
}
i>100{
    if (/^[[:blank:]]*$/) {
        i = 0
    } else if (NF > 1) {
        printf format, l, $1, $2, $3, $4, $5
        p1=$1; p2=$2; p3=$3; p5=$5
    } else {

        printf format, l, p1, p2, p3, $1, p5
    }
}

这可能会给您一个起点。 注意 :输出未排序,并且缺少输出的标题和第一列,但我将其留给您!

awk '/^8\./ { a[$1 " " $2] += $3 ; b[$1 " " $2] += $4 } 
     END { for (k in a) { 
             printf("%s %i %i\n",k,a[k],b[k]) 
         } 
    }' INPUTFILE
  1. 使用/^8\\./只能在相关行上工作
  2. a[$1 " " $2] += $3 ; b[$1 " " $2] += $4 a[$1 " " $2] += $3 ; b[$1 " " $2] += $4相关行存储并增加第三和第四列
  3. 最后通过遍历a数组打印相关数据,并从b数组中获取数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM