在perl中拆分和分配行

时间:2011-12-12 09:52:49

标签: perl

我有这种形式的行:

xxx| aaa yyy| bbb ccc zzz| ddd eee

我想用perl分割和分发这个数组:

xxx| aaa
yyy| bbb
yyy| ccc
zzz| ddd
zzz| eee

2 个答案:

答案 0 :(得分:1)

好的,转自评论。在问题结束时我把它放在那里。

使用替换正则表达式,我们遍历字符串,提取键和值。值字符串在空格上拆分,并存储在%hash中的匿名数组中,并带有相应的键。

<强>代码:

use strict;
use warnings;
use v5.10; # to enable say

$_="xxx| aaa yyy| bbb ccc zzz| ddd eee"; 
my %hash; 
while (s/(\w+)\|([ \w]+\b(?!\|))//) { 
    $hash{$1} = [ split ' ',$2 ];
}
for my $key (keys %hash) {
    for my $val (@{$hash{$key}}) { 
        say "$key | $val";
    }
}

<强>输出:

xxx | aaa
yyy | bbb
yyy | ccc
zzz | ddd
zzz | eee

答案 1 :(得分:0)

单线解决方案:

perl -lne'for(split/ (?=\w+\|)/){($p,@a)=split/ /;print"$p $_"for@a}'

用法:

$ echo "xxx| aaa yyy| bbb ccc zzz| ddd eee" | perl -lne'for(split/ (?=\w+\|)/){($p,@a)=split/ /;print"$p $_"for@a}'
xxx| aaa
yyy| bbb
yyy| ccc
zzz| ddd
zzz| eee