2013-05-22 39 views
0

我試圖從一個非常大的文檔中提取一些信息。該文件遵循以下模式:模式之間的處理線

'>Title 1' 

0 200, >name [numbers&letters] 

1 200, >name [numbers&letters] 

2 200, >name [numbers&letters] 

'>Title 2' 

0 200, >name [numbers&letters] 

1 200, >name [numbers&letters] 

... 

'>Title 600.000' 

對於每個組Title之間的線的,我需要打印3製表符分隔的列

  • 線中的每Title
  • name
  • 之間的數
  • 該組中第一行第二列的編號(第一行始終以0開頭)–在該示例中編號爲200

我想用Bash和awk/sed,但我無法爲此任務定義一種循環。有任何想法嗎?

+4

什麼是預期的輸出?它可以通過'awk'完成,但如果不知道確切需要什麼,則不可能。另外,如果你已經嘗試過任何東西,請告訴我們:) – abasu

+0

輸出將與列中的3個值(標籤分隔) – user2245731

+0

以及任何以下答案將做 – abasu

回答

2

未經測試,但應該接近:

awk -F'[ ,>]+' ' 
/^.>/ { 
    if (count != "") { printf "%s %d %d\n", name, number, count } 
    count = 0 
    name = number = "" 
    next 
} 
NF { 
    if (++count == 1) { number = $2; name = $3 } 
} 
END { 
    if (count != "") { printf "%s %d %d\n", name, number, count } 
} 
' file 
+0

謝謝!它的作品,但有一些修改:) awk' /^>/{ if(count!=「」){printf「%s%d%d \ n」,name,number,count} count = 0 name = number =「」 next } NF if(++ count == 1){number = $ 2;名稱,數量,計數} } } $ 1($ name = $ 3} } END { if(count!=「」){printf「%s%d%d \ n」 – user2245731

1
awk '/^.>/{t=$0;next} NF{a[t]++} $1=="0"{b[t]=$2} END{for (i in a) print i,a[i],b[i]}' file 
+0

如果標題是uniq,您不需要存儲它們在一個數組中,可以使用'printf'逐個打印它們或者一次打印(當您獲得下一個標題時,打印最後一個標題的數據) – abasu

相關問題