2013-08-06 49 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"'