2013-04-10 64 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