搜索
查看: 4015|回复: 9

【Panda姐-perl练习题7】不同文件内的数据进行批量运算

[复制链接]

58

主题

103

帖子

756

积分

版主

Rank: 7Rank: 7Rank: 7

积分
756
QQ
发表于 2016-8-28 15:32:52 | 显示全部楼层 |阅读模式
本帖最后由 Panda姐 于 2016-8-30 19:08 编辑

题目:
现有行数相同的3个文件A、B、C,编写脚本将3个文件的每一相同行的数字分别相加后再乘以0.4,将结果输出到新文
件。(精简代码,要求代码15行以内)

代码记录:
[Perl] 纯文本查看 复制代码
#! usr/bin/perl -w
my(@fileA,@fileB,@fileC,$fileA,$fileB,$fileC,$new,$n,$m,$i);
open(FILEA,"A");
open(FILEB,"B");
open(FILEC,"C");
open(FILED,">D");
@fileA=<FILEA>;
@fileB=<FILEB>;
@fileC=<FILEC>;
foreach $fileA(@fileA){
    ++$i;
    $n=$m=0;
    foreach $fileB(@fileB){
         ++$n;
        if($n<$i){next;}
        if($n>$i){last;}
        if($n=$i){ 
             foreach $fileC(@fileC){
             ++$m;
             if($m<$i){next;}
             if($m>$i){last;}
             if($m=$i){
             $new=($fileA+$fileB+$fileC)*0.4;
             print FILED "$new\n";
             } 
             } 
        }
     }
 }


文件A、B、C见以下压缩包:



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x



上一篇:【Panda姐-perl练习题6】统计两个文件的共有及特有内容
下一篇:【Panda姐-perl练习题8】找出基因列表中出现次数最多的基因
回复

使用道具 举报

5

主题

32

帖子

484

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
484
发表于 2017-2-21 17:25:33 | 显示全部楼层
#! usr/bin/perl -w
my(@fileA,@fileB,@fileC,$fileA,$fileB,$fileC,$new,$n,$m,$i);
open(FILEA,"A");
open(FILEB,"B");
open(FILEC,"C");
open(FILED,">D");
chomp(@fileA=<FILEA>);
chomp(@fileB=<FILEB>);
chomp(@fileC=<FILEC>);
for($n=0;$n<@fileA;$n++){
$new=($fileA[$n]+$fileB[$n]+$fileC[$n])*0.4;
print FILED "$new\n";
}
提供了最简单版本,用时最短
回复 支持 2 反对 0

使用道具 举报

0

主题

1

帖子

41

积分

新手上路

Rank: 1

积分
41
发表于 2016-10-31 14:53:44 | 显示全部楼层
[Shell] 纯文本查看 复制代码
paste A B C|awk '{print ($1+$2+$3)*0.4} >D'
回复 支持 2 反对 0

使用道具 举报

0

主题

14

帖子

229

积分

中级会员

Rank: 3Rank: 3

积分
229
发表于 2016-9-26 09:53:19 | 显示全部楼层
本帖最后由 0号菜鸟 于 2016-9-26 09:54 编辑

[Python] 纯文本查看 复制代码
# coding=utf-8
import os

os.chdir('C:/workspace/7')

file_A = open('A')
file_B = open('B')
file_C = open('C')
add_ABC = open('add_ABC.txt','w+')
read_A = file_A.readlines()
read_B = file_B.readlines()
read_C = file_C.readlines()

for i in range(len(read_A)):
    add = float(read_A[i][:-1])+float(read_B[i][:-1])+float(read_C[i][:-1])
    add_ABC.write(str(add)+'\n')

file_A.close()
file_B.close()
file_C.close()
add_ABC.close()
回复 支持 1 反对 0

使用道具 举报

29

主题

131

帖子

1208

积分

金牌会员

Rank: 6Rank: 6

积分
1208
发表于 2016-10-27 14:09:02 | 显示全部楼层
#! usr/bin/perl -w
my(@fileA,@fileB,@fileC,$fileA,$fileB,$fileC,$new,$i);
open(FILEA,"A");
open(FILEB,"B");
open(FILEC,"C");
open(FILEE,">E");
@fileA=<FILEA>;
@fileB=<FILEB>;
@fileC=<FILEC>;
for ($i = 0; $i <= $#fileA; $i++){
        my $sum = ($fileA[$i] + $fileB[$i] + $fileC[$i])*0.4;
        print FILEE "$sum\n";
}
close FILEA;
close FILEB;
close FILEC;
close FILEE;
回复 支持 反对

使用道具 举报

3

主题

13

帖子

104

积分

注册会员

Rank: 2

积分
104
发表于 2017-4-20 15:28:04 | 显示全部楼层
[Perl] 纯文本查看 复制代码
#!/usr/bin/perl
@test=`ls gene*txt`;
$key=@test;
for $i(1..$key){open($i,"$test[$i-1]");
                $m=0;
                while(<$i>){chomp;
                                $hash{$m++}+=$_;
                        }
                }
for $i(1..$key){close $i;}
open(OUT,">out.txt");
foreach $key(sort {$a<=>$b} keys %hash){
                                        print OUT $hash{$key}*0.4."\n";
                                        }
close OUT;
回复 支持 反对

使用道具 举报

1

主题

16

帖子

120

积分

注册会员

Rank: 2

积分
120
发表于 2017-7-18 10:32:56 | 显示全部楼层
[Perl] 纯文本查看 复制代码
paste a b c|perl -lane 'print ($F[0]+$F[1]+$F[2])*0.4'>new


shell与perl 结合!
回复 支持 反对

使用道具 举报

1

主题

16

帖子

120

积分

注册会员

Rank: 2

积分
120
发表于 2017-7-18 10:53:06 | 显示全部楼层
[Perl] 纯文本查看 复制代码
#!/usr/bin/perl
use strict;
use warnings;
open A,"A";open B,"B";open C,"C";open New,">new";
my (@a,@b,@c,$new);
@a=<A>;@b=<B>;@c=<C>;
for (0..scalar @a-1) {
	$new=($a[$_]+$b[$_]+$c[$_])*0.4;
	print New "$new\n";
}
close (A);close(B);close(C);close(New);
回复 支持 反对

使用道具 举报

0

主题

20

帖子

139

积分

注册会员

Rank: 2

积分
139
发表于 2019-6-17 03:29:08 | 显示全部楼层
python
f1=open('E:/jiaoben/7/A')
f2=open('E:/jiaoben/7/B')
f3=open('E:/jiaoben/7/C')
A=f1.readlines()
B=f2.readlines()
C=f3.readlines()
l=0
with open ('E:/jiaoben/7/ABC_output.txt','w') as f4:
    for i in range(len(A)):
        res=(int(A[l][0:-1])+int(B[l][0:-1])+int(C[l][0:-1]))*0.4
        f4.write(str(res)+'\n')
        l+=1
回复 支持 反对

使用道具 举报

1

主题

5

帖子

46

积分

新手上路

Rank: 1

积分
46
发表于 2019-7-30 09:09:23 | 显示全部楼层
少一个R脚本
A<-read.table("A")
B<-read.table("B")
C<-read.table("C")
D<-data.frame("out"=rep(0,100))
for(i in seq(1,100)){D[i,1]<-(A[i,1]+B[i,1]+C[i,1])*0.4}
write.table(E,"E",quote=F,row.names=F,col.names=F)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|生信技能树 ( 粤ICP备15016384号  

GMT+8, 2019-8-24 22:27 , Processed in 0.049303 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.