2013-04-10 59 views
0

我們假設我有一個文本文件,其中包含來自不同來源的記錄。該文件是這樣的:如何計算跨越多行sed的記錄中的點?

1000 Once upon a time, happy end. 
1001 Tornado in NY city, the statue was finally found. 
1002 I bought her an iphone 
yes 
for $1000. And then 

happy end. 
1003 How many times 
have I seen it? 
not many. Actually. 
1004 5 Cars. 2 Toys. 3 Birds. 

每一行與\n開始,如{1000 ... 2000}行號。行號與標籤\t分開。

那麼如何計算"."sed的出現在一個record

可以sed替換所有字符,除了在模式中給出的字符而不將它們分組到[^...]

輸出應該是這樣的:

1000 1 
1001 1 
1002 2 
1003 2 
1004 3 
+0

入住這http://stackoverflow.com/a/1603638/171318 – hek2mgl 2013-04-10 14:19:01

+1

謝謝,但它不是我想在這裏做什麼。我需要統計一條記錄中的事件。 – minerals 2013-04-10 14:33:24

+2

好吧,那麼我沒有得到這個問題,因爲它的目的是 – hek2mgl 2013-04-10 14:42:19

回答

3

這裏有一個方法:

$ awk -v r=1000 '{print r++,split($0,a,".")-1}' RS="\n[0-9]+\t" file 
1000 1 
1001 1 
1002 2 
1003 2 
1004 3 
+0

這將計算一個文件中的所有點,我只需要計算一個記錄中的點。注意爲什麼我在查詢中分配RS。 – minerals 2013-04-10 14:34:59

+0

@minerals添加預期的輸出總是一個好主意,我不知道標籤在你的文件中的位置,所以我無法測試。請輸出'cat -t file'到你的問題,所以我知道標籤在哪裏。 – 2013-04-10 14:42:37

+0

@礦物質你的問題現在更清楚了,看編輯,應該做的伎倆。 – 2013-04-10 14:53:16