[已解决]~~用perl将几个txt文件按照每个文件第一列相同名字合并,谢谢
本帖最后由 baiguihuajl 于 2015-09-29 13:51 编辑如何用perl,按照每个文件第一列的名字将很多个txt文件合并,并且保留第一列存在相同名字的数值:
如将文件1.txt和2.txt和3.txt...合并
1.txt:
a 1
b 2
c 3
d 4
e 5
2.txt:
a 2
c 5
d 2
e 1
f 2
3.txt:
b 3
c 5
d 2
e 5
s 5
合并成:
c 3 5 5
d 4 2 2
e 5 1 5
试试用HASH 能具体告诉我这么写代码吗?虽然知道哈希,但是不知道怎么用,而且将多个txt文件合并的循环也不会。。。谢谢哈~
回复 2# b114213903
本帖最后由 MMMIX 于 2015-09-24 17:57 编辑
回复 3# baiguihuajl
先别想 hash 或是循环什么的了。这个问题你倒是有思路没有呀?没有思路(逐步描述的伪代码),就先去想思路;想清楚,有思路了,直接把它翻译成 Perl 代码就完了。要是翻译过程中有什么问题,可以发贴问。 一个思路use 5.010;
my $c = 1 + @ARGV;
while (<>) {
( $a, $b ) = split;
push @{ $_{$a} ||= [$a] }, $b;
}
$c - @$_ or say join "\t", @$_ for values %_;
perl join.pl 1.txt 2.txt 3.txt 4.txt 5.txt 好的,谢谢~~~回复 4# MMMIX
可以做出来,太感谢你了,我还要琢磨一下每句话什么意思~~~回复 5# ba_du_co
for($i=1;$i<=4;$i++){
open(DATA,"$i.txt");
while(<DATA>){
chomp;
@line=split(/\t/,$_);
if($i == 1){
$hash{$line}=$line;
$num{$line}=1;
}else{
if(exists $hash{$line}){
$hash{$line}.="\t".$line;
$num{$line}++;
}
}
}
close(DATA);
}
foreach(keys %num){
if($num{$_} == 4){
print "$_\t$hash{$_}\n";
}
}还有一个比较容易看懂的代码~~~ perl 非常好用,谢谢高手。
页:
[1]