perl 对2个txt文件内容进行按ID关联操作生成新的txt文件

求个perl的案例,每个文件的数据量上千万,最后考虑到linux服务器处理时占用内存情况,谢谢~
a.txt内容:
id name age address
1 李林 18 北京
2 张三 22 天津
3 王五 32 上海

b.txt内容:
sex id phone
男 1 13024
女 3 15678
男 5 1678

c.txt生成后的文件内容:
id name address sex phone
1 李林 北京 男 13024
3 王五 上海 男 1678
最后成生的文件是这个,上面少了个sex列:

c.txt生成后的文件内容:
id name address sex phone
1 李林 北京 男 18 13024
3 王五 上海 男 32 1678

程序代码: my(%d1,%d2,$str,$key,$val);my($id,$a,$b,$c,$d,$e,$f,$g);#读取文件1open(FD,'1');while(){ chomp; ($id,$a,$b,$c,$d)=split(/\s+/); $d1{$id}="$a\t$b\t$c\t$d";}close(FD);#读取文件2open(FD,'2');while(){ chomp; ($id,$e,$f,$g)=split(/\s+/); $d2{$id}="$e\t$f\t$g";}close(FD);#生成文件3open(FD,'>3');foreach $id (keys %d1){ print FD "$id\t".$d1{$id}."\t".(exists($d2{$id})?$d2{$id}:"NA\tNA\tNA")."\n"; delete($d2{$id}) if (exists($d2{$id}));}foreach $id (keys %d2){ print FD "$id\t".(exists($d1{$id})?$d1{$id}:"NA\tNA\tNA")."\t".$d2{$id}."\n";}close(FD); 运行拷屏:
温馨提示:内容为网友见解,仅供参考
无其他回答

perl实战-合并两个列相同的文件
输入文件 为test.fa如下,以第一条序列为例>ENSRNOT00000000957 gene=F1M7K0_RATCDS=1-1104 依次为基因ID、名称、编码区位置以下为碱基序列 1、将序列读入哈希变量%gene_fasta(建议 key为“基因ID” value为“碱基序列”)2、输出第一条(ENSRNOT00000000957)序列的反向互补序列 3、输出表格依次为...

perl处理多个文件并进行uniq处理,可以给个思路么?
HASH就是用来解决这个问题的,例如代码:my %dat;my($line,$num);读文件、统计 for $f (['1.txt','2.txt','3.txt']){ open(FD,$f);while ($line=<FD>){chomp($line);$dat{$line}++;} close(FD);} 写文件 open(FD,'>out.txt');num=0;foreach $line (keys %dat){ num...

读取文本文件的第一列并输出到新的文本文件中(perl语言)
读取文本文件的第一列并输出到新的文本文件中(perl语言) 5 文本文件passwd.old.txt结果是后两张图所示,各位大神,帮帮忙了... 文本文件passwd.old.txt结果是后两张图所示,各位大神,帮帮忙了 展开  我来答 1个回答 #热议# “嘴硬心软”和“嘴软心硬”的女孩,哪个过得更好?t990310348 2018-01-15 ...

perl txt文件转置
open SRC, "a.txt" or die "Can't open a.txt";my $arr = [];my $col = 0;while ( chomp ( my $line = ) ) { my @data = split \/\\s+\/, $line;my $row = 0;print "@data$\/";foreach ( @data ) { arr->[$col][$row] = $_;row++ } col++;} $col--;close...

perl,生物信息中,我要对每四行一循环的文档操作
你是要过滤polyA么, 你应该考虑reads中测序错误产生的N my $cutNum = 40;open FQ,"infile" or die "$!";open OUT,">outfile" or die "$!";while(<FQ>){my $id = $_;my $seq = <FQ>;<FQ>; # read the '+'my $qual = <FQ>;next if ($seq =~ \/[AN]{$cutNum}\/ ||...

Perl的几个特殊变量用法
! 根据上下文内容,返回错误号或者错误串 运行本脚本的 Perl 程序进程 ID 默认值为 0 。 如果为 1 的话, 表示在字符串中进行多行匹配; 0 表示只在单行中匹配 , 打印函数的输出字段分隔符。 一般在以逗号隔开的字符串中不打印其定界符, 除非设置了 $,=" "" 与 $, 类似, 但它是在双引号...

求助:根据第一行seqID提取第二行的序列数据,求可实现的perl程序
">$name\\t$seq\\n";} } close IN;脚本保存为run.pl 序列所在文件假设为 a.fa 你所需要的ID列表所在文件为ID.txt 那么在命令行输入perl run.pl ID.txt a.fa 回车即可 结果将在屏幕打印出来。如果需要另存 则假设你另存为 c.txt 那么命令行输入 perl run.pl ID.txt a.fa > c.txt ...

文件句柄的特点
确认设置$handle为某个单一个量, 否则你将对空句柄打开一个新的文件。一旦你已为输入打开一个句柄(或你使用STDIN), 你就能使用行读操作<>, 读一行。这个也以钻石操作闻名,因为它的形状。这个钻石操作包含你想读的句柄(<SESAME>)[4]。使用STDID句柄读用户提供的答案, 如下:[4]空钻石操作<>, 将从命令行...

能否把.txt格式文件转换成*.fmt foxbase 格式文件
hlp Windows应用程序帮助文件hqx Macintosh中使用BinHex将二进制文件编码为7位的文本文件,大多数Macintosh文件皆以.hqx出现(.bin极少使用),在Macintosh中,可使用StuffIt Expander对.hqx解码,在Windows中可使用BinHex 13解码ht 超级终端htm 保存超文本描述语言的文本文件,用于描述各种各样的网页,使用各种浏览器打开html 同...

请教高手什么类型的文件是TXT文件?
386 在386或更高级处理器上使用的文件 4GE Informix 4GL编译后代码 4GL Informix 4GL源代码 669 Composer 669;UNIX Composer音乐模型文件;669磁道模块 A 对象代码库文件 AAM Authorware shocked文件 AAS Authorware shocked包 ABF Adobe二进制屏幕字体 ABK CorelDRAW自动备份文件 ABS 该类文件有时用于指示一个摘要(...

相似回答