2014-06-17 39 views
1

我正在使用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 
    } 
} 
+0

你想做什麼?有什麼要求達到你想要的輸入?爲什麼只有8.1.1.X的? –

+0

嗨,這是測試的輸出文件之一。並且該文件具有不同的迭代(TR 1和TR 2 ...)。我必須解析該文件並顯示每個迭代的Runno的總數,Runname。 Runno可以重複多次,每次迭代。 Runno僅以8.1.1.X開頭。我需要分割/解析文件並如上所述顯示在表格列中。 – user3745740

+0

echo「Enter Number:」 read n1 awk'/^$/{ca =「」; cp =「」}/^#/ {ca = ca「」$ 0}/^ $ n1/&& ca {cp = ca; ca =「」}/^ $ n1/{print $ 0「」cp}「請提示我如何從輸入中獲取數值 – user3745740

回答

1

這可能會給你一個起點。 注意:輸出未排序,並且缺少輸出中的標題和第一列,但我將它留給你!

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對相關線路店工作,並增加了第三和第四列
  3. 終於通過了a陣列迭代打印相關數據,並得到來自b數組的數據也是如此。
+1

第一行中的'1'和'2'不需要 –

+0

@Jidder,you當然是對的。我已經複製了一箇舊版本:-) –

+1

@ Zsolt Botykai把l改爲k,我認爲它完成了:) –