我正在使用一个看起来像这样的表
C1 C2 C3
1 a b
2 c d
4 e g
4 f h
5 x y
... ... ...
如果C1中的值相同(在本例中有4倍),那么我希望将C2和C3的值粘贴在第一行,其中C1为4,我想删除第二行C1中的4行。所以最后看起来应该是这样的
C1 C2 C3
1 a b
2 c d
4 e,f g,h
5 x y
我正在使用perl脚本。我正在使用while循环遍历文件。我已经使用了像我看到的或者在其他脚本中看到的东西,但是我无法弄明白如何使用它们。它看起来很简单......
这就是我的while循环现在的样子
while (<$DATA>) {
@columns = split
$var1 = $columns[0]
$var2 = $columns[1]
$var3 = $columns[2];
}
答案 0 :(得分:2)
使用哈希来控制重复项。我在我的示例中使用了散列(%info
)散列,其中包含键C1和C2。每个都包含一个数组引用来添加重复的项目。
use strict;
use warnings;
my %info = ();
while (<DATA>) {
my @columns = split /\s+/;
if( exists $info{ $columns[0] } ) {
push @{ $info{ $columns[0] }->{C2} }, $columns[1];
push @{ $info{ $columns[0] }->{C3} }, $columns[2];
}
else {
$info{ $columns[0] } = { C2 =>[ $columns[1] ], C3 => [ $columns[2]] }
}
}
foreach my $c1(sort {$a<=>$b} keys %info ) {
print $c1, "\t",
join(',',@{$info{$c1}->{C2}}), "\t",
join(',',@{$info{$c1}->{C3}}), "\n";
}
__DATA__
1 a b
2 c d
4 e g
4 f h
5 x y