可以说我有一个如下文件:
我想将所有十进制数存储在哈希中.
hello world 10 20
world 10 10 10 10 hello 20
hello 30 20 10 world 10
Run Code Online (Sandbox Code Playgroud)
我在看这个
这工作得很好:
> perl -lne 'push @a,/\d+/g;END{print "@a"}' temp
10 20 10 10 10 10 20 30 20 10 10
Run Code Online (Sandbox Code Playgroud)
那么我需要的是计算每个正则表达式的出现次数.
为此我认为最好将所有匹配存储在哈希中,并为每个键分配一个递增值.
所以我试过了:
perl -lne '$a{$1}++ for ($_=~/(\d+)/g);END{foreach(keys %a){print "$_.$a{$_}"}}' temp
Run Code Online (Sandbox Code Playgroud)
这给了我一个输出:
> perl -lne '$a{$1}++ for ($_=~/(\d+)/g);END{foreach(keys %a){print "$_.$a{$_}"}}' temp
10.4
20.7
Run Code Online (Sandbox Code Playgroud)
不管我错了,有人能纠正我吗?
我期望的输出是:
10.7
20.3
30.1
Run Code Online (Sandbox Code Playgroud)
虽然我可以在awk中执行此操作,但我只想在perl中执行此操作
输出的顺序也不是我关心的问题.
$a{$1}++ for ($_=~/(\d+)/g);
Run Code Online (Sandbox Code Playgroud)
这应该是
$a{$_}++ for ($_=~/(\d+)/g);
Run Code Online (Sandbox Code Playgroud)
并且可以简化为
$a{$_}++ for /\d+/g;
Run Code Online (Sandbox Code Playgroud)
这样做的原因是/\d+/g创建一个匹配列表,然后迭代for.当前元素在$_.我想$1会包含最后一场比赛留在那里的东西,但绝对不是你想要在这种情况下使用的东西.