2013-08-06 69 views
0

我有一個非常大的文件(在這裏得到sed和awk的問題)。 我主要感興趣的樣子行:如何在模式中減去一行中的兩個數字?

\# Name: name [...] [...] [here=178542..178940] 

\# Name: name [here=reversed(10000..18899)] 

從這一行我想提取的兩個數字。第一個數字(x)在模式[here=[here=reversed(之後並在..之前停止,第二個數字(y)在..之後開始並以])]結束。 提取這些數字後,我想減去y-x = z並打印name和'z'。

對於任何提示和技巧,我會很感激!

回答

1

這個工作對我來說:

perl -ne '/Name: (\S*) .*\[here=\D*(\d+)\.\.(\d+)/ and print $1, ": ", $3-$2, "\n";' data.txt 

與data.txt中:

\# Name: name [...] [...] [here=178542..178940] 
\# Name: name [here=reversed(10000..18899)] 
1

這一個班輪適用於您的示例行:

perl -ne '/Name: (.*?) .*\[here=.*([0-9]+)\.\.([0-9]+)/ and print "$1 ", $3-$2, "\n"'