【发布时间】:2014-06-17 19:27:24
【问题描述】:
我正在寻找使用 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
}
}
【问题讨论】:
-
你想做什么?获得所需输入的要求是什么?为什么只有 8.1.1.X 的?
-
嗨,这是其中一项测试的输出文件。并且该文件具有不同的迭代(TR 1 和 TR 2 ...)。我必须解析文件并显示每个迭代的 Runno 总数、Runname。 Runno 可以为每次迭代重复多次。 Runno 仅从 8.1.1.X;s 开始。如上所述,我需要拆分/解析文件并显示在表格列中。
-
echo “输入号码:” 读取 n1 awk '/^$/ {ca=""; cp=""} /^#/ {ca=ca " " $0} /^$n1/ && ca {cp=ca; ca=""} /^$n1/ {print $0 " " cp}' 请建议我如何从输入中获取值