如何在模式中减去一行中的两个数字?

时间:2013-08-06 12:00:38

标签: perl pattern-matching

我有一个非常大的文件(在这里遇到sed和awk的问题)。 我主要感兴趣的是:

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

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

从这一行我想提取两个数字。第一个数字(x)位于模式[here=[here=reversed(之后,在..之前停止,第二个数字(y)在..之后开始,以{{1结尾}或]。 提取这些数字后,我想减去y-x = z并打印)]和'z'。

对于任何提示和技巧,我将非常感激!

2 个答案:

答案 0 :(得分:1)

这个单行程适用于您的示例行:

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

答案 1 :(得分:1)

这对我有用:

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

with data.txt:

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