Archive for 四月, 2010
perl 求合并一个数组的方法
0@a=(
['a','2','4'],
['b','3','2'],
['c','4','4'],
['d','t','3'],
['a','4','5'],
['c','3','5']
);
判断第一个字段 如果出现相同的 就吧后面的两个字段加一起
想要的结果是这样的
a,24, 45
b ,3, 2
c ,43, 45
d ,t, 3
[ 本帖最后由 luesfeng 于 2009-10-3 13:54 编辑 ]
CODE:
my %h = ();
for(@a){
push @{$h{$_->[0]}},$_->[1].$_->[2];
}
for(sort keys %h){
print “$_ @{$h{$_}}\n”;
}
CODE:
C:\file>perl 5.pl
a 24 45
b 32
c 44 35
d t3
Perl 根据相同字段并合并两个文本
0有两个文本:
a.txt的内容:
0001|abc|1000.00
0002|ddd|1200.20
0003|dde|100.01
0005|ggg|200
……..
……..
b.txt的内容:
1234|2600|1|AAAAA|abc|88888888|
1234|2600|2|BBBBB|ddd|8888888|
1234|2600|3|CCCCC|dde|8888|
1234|2600|4|DDDDD|eee|88888888888|
1234|2600|5|AAAAA|ggg|888888|
……….
……….
我想把a.txt的第一个字段删去前面的0后与b.txt的第3个字段比较,如果相等,就把b.txt中的第4个字段放在a.txt的前面.
生成结果如下:
AAAAA|0001|abc|1000.00
BBBBB|0002|ddd|1200.20
CCCCC|0003|dde|100.01
AAAAA|0005|ggg|200
………..
#!/usr/bin/perl
$filea="a.txt";
$fileb="b.txt";
open(FB,"<$fileb") || die "Can't read $fileb\n$!\n";
while(
@line=split(/\|/);
$datab{$line[2]}=$line[3];
}
close FB;
open (FA,"<$filea") || die "Can't read $filea\n$!\n";
while(
{
@line = split(/\|/);
$dataa{$line[0]} = $_;
}
foreach $key (sort {$b cmp $a} keys %dataa)
{
print $datab{int $key}.'|'.$dataa{$key} if exists $datab{int $key};
}
awk 列相同 合并行
0如果第一列与第二列相同,就合并行
cat a.txt
a b c
a b d
a b e
awk '{v=$1" "$2;a[v]=a[v](a[v]?" ":"")$3}END{for (j in a) print j,a[j]}' file