请问这段perl代码是什么意思,请详细点,谢谢!

#!usr/bin/perl-wusestrict;use5.014;openIN,"<",$ARGV[0]ordie"readfileerror\n";openOUT,... #!usr/bin/perl -w
use strict;
use 5.014;

open IN, "<", $ARGV[0] or die "read file error\n";
open OUT, ">", $ARGV[1] or die "out error\n";

while(<IN>){
chomp;
if(/Molecule: ZINC/){
s/Molecule: //;
s/\s//g;
print OUT;
}elsif(/Amber Score:/){
s/Amber Score://;
s/\s//g;
print OUT "\t$_\n";
}
}
展开
 我来答
5857068
2013-11-29 · 超过12用户采纳过TA的回答
知道答主
回答量:25
采纳率:100%
帮助的人:27万
展开全部
#!usr/bin/perl -w
use strict;
use 5.014;

open IN, "<", $ARGV[0] or die "read file error\n"; #以只读方式打开文件,文件句柄为IN, 文件名为命令行里的第一个参数
open OUT, ">", $ARGV[1] or die "out error\n"; #新建文件, 文件句柄为OUT, 文件名为命令行里第二个参数

while(<IN>){   #逐行读入文件,以下为按行操作
      chomp;
      if(/Molecule: ZINC/){   
           s/Molecule: //; # 行替换, 替换掉"Molecule: ", 即将 "Molecule: ZINC foo"这样的行替换为" ZINC foo"
           s/\s//g;  # 继续替换上一行,替换掉剩余的所有空格(包括空格,横竖制表符,换行符,换页符), 即将" ZINC foo"替换为"ZINCfoo"
           print OUT;  # 将替换完的行写入 文件(命令行里第二个参数)
        }elsif(/Amber Score:/){
           s/Amber Score://;  # 和上面一样,替换掉“Amber Score:”以及所有空格, 并写入刚才打开的那个文件, 写入时每行的格式为:“制表符”“被替换以后的行内容”“换行符”
           s/\s//g;
           print OUT "\t$_\n";
        }
}


总结一下, 就是读入这样的文本:

Module: fuck1 
Amber Score: 998
Module: fuck2 
Amber Score: 101
Module: fuck3
Amber Score: 250

然后输出这样的文件:

fuck1 998
fuck2 101
fuck3 250


说真的,吐了,这脚本写得太烂了。

追问
额,那我想把Score:留下,把Amber和998删除该怎么弄呢?谢谢啊!
追答
s/Amber Score://; 
s/\s//g;
print OUT "\t$_\n";

改为:

s/Amber\s+(Score:).*$/$1/g;
print OUT "\t$_\n";
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式