[英]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
/^8\\./
只能在相关行上工作 a[$1 " " $2] += $3 ; b[$1 " " $2] += $4
a[$1 " " $2] += $3 ; b[$1 " " $2] += $4
相关行存储并增加第三和第四列 a
数组打印相关数据,并从b
数组中获取数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.