请问这段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";
}
} 展开
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";
}
} 展开
1个回答
展开全部
#!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";
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询