Regex 将awk脚本转换为perl
我正试图将这段代码翻译成perlRegex 将awk脚本转换为perl,regex,perl,awk,Regex,Perl,Awk,我正试图将这段代码翻译成perl gawk '/^>c/ {OUT=substr($0,2) ".fa";print " ">OUT}; OUT{print >OUT}' your_input 有人能帮我吗?Perl有一个实用程序可以帮你完成这个任务。如果您的脚本是callscript.awk,则您将运行: $ a2p script.awk 产生: #!/usr/bin/perl eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
gawk '/^>c/ {OUT=substr($0,2) ".fa";print " ">OUT}; OUT{print >OUT}' your_input
有人能帮我吗?Perl有一个实用程序可以帮你完成这个任务。如果您的脚本是call
script.awk
,则您将运行:
$ a2p script.awk
产生:
#!/usr/bin/perl
eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
if $running_under_some_shell;
# this emulates #! processing on NIH machines.
# (remove #! line above if indigestible)
eval '$'.$1.'$2;' while $ARGV[0] =~ /^([A-Za-z_0-9]+=)(.*)/ && shift;
# process any FOO=bar switches
$, = ' '; # set output field separator
$\ = "\n"; # set output record separator
while (<>) {
chomp; # strip record separator
if (/^>c/) {
$OUT = substr($_, (2)-1) . '.fa';
&Pick('>', $OUT) &&
(print $fh ' ');
}
;
if ($OUT) {
&Pick('>', $OUT) &&
(print $fh $_);
}
}
sub Pick {
local($mode,$name,$pipe) = @_;
$fh = $name;
open($name,$mode.$name.$pipe) unless $openammeamme}++;
}
Perl还提供了一个转换sed脚本的工具:。Perl有一个实用程序可以为您完成这项工作。如果您的脚本是call
script.awk
,则您将运行:
$ a2p script.awk
产生:
#!/usr/bin/perl
eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
if $running_under_some_shell;
# this emulates #! processing on NIH machines.
# (remove #! line above if indigestible)
eval '$'.$1.'$2;' while $ARGV[0] =~ /^([A-Za-z_0-9]+=)(.*)/ && shift;
# process any FOO=bar switches
$, = ' '; # set output field separator
$\ = "\n"; # set output record separator
while (<>) {
chomp; # strip record separator
if (/^>c/) {
$OUT = substr($_, (2)-1) . '.fa';
&Pick('>', $OUT) &&
(print $fh ' ');
}
;
if ($OUT) {
&Pick('>', $OUT) &&
(print $fh $_);
}
}
sub Pick {
local($mode,$name,$pipe) = @_;
$fh = $name;
open($name,$mode.$name.$pipe) unless $openammeamme}++;
}
Perl还提供了一个转换sed脚本的工具:。此Perl one liner应该与该awk命令等效:
perl -ane 'if($F[0] =~ /^>c/){$OUT=substr($F[0],1).".fa"; if(OUT==null) {open(OUT,">$OUT");} print OUT " \n"} if ($OUT){print OUT $_} END{close(OUT)}' file
缩进命令行:
perl -ane 'if ($F[0] =~ /^>c/) {
$OUT = substr($F[0], 1).".fa";
if (OUT==null) { open(OUT, ">$OUT") }
print OUT " \n"
}
if ($OUT) {
print OUT $_
}
END{close(OUT)
}' file
此perl one liner应与该awk命令等效:
perl -ane 'if($F[0] =~ /^>c/){$OUT=substr($F[0],1).".fa"; if(OUT==null) {open(OUT,">$OUT");} print OUT " \n"} if ($OUT){print OUT $_} END{close(OUT)}' file
缩进命令行:
perl -ane 'if ($F[0] =~ /^>c/) {
$OUT = substr($F[0], 1).".fa";
if (OUT==null) { open(OUT, ">$OUT") }
print OUT " \n"
}
if ($OUT) {
print OUT $_
}
END{close(OUT)
}' file
创建2个文件:
==> caaa.fa <==
>caaa
sdf
sdff
==> cbbb.fa <==
>cbbb
ew
ew
==>caaa.fa caaa
自卫队
sdff
==>cbbb.fa cbbb
电子战
电子战
创建2个文件:
==> caaa.fa <==
>caaa
sdf
sdff
==> cbbb.fa <==
>cbbb
ew
ew
==>caaa.fa caaa
自卫队
sdff
==>cbbb.fa cbbb
电子战
电子战
我刚刚使用了它,我运行了script.pl,但它给了我这个消息。我相信a2p
会产生正确的翻译,但只要你不必查看源代码,它就很好。脚本将fasta文件拆分为其他较小的文件,awk文件可以工作,但perl文件不能:s(几年前)我开始学习perl,用awk编写脚本,并将它们转换为perl,并简化结果!:)我刚刚使用了它,运行了script.pl,但它给了我这个消息。我相信a2p
会产生正确的翻译,但只要你不必查看源代码,它就很好。脚本将fasta文件拆分为其他较小的文件,awk文件可以工作,但perl文件不能:s(几年前)我开始学习perl,用awk编写脚本,并将它们转换为perl,并简化结果!:)是否可以将其用作perl脚本中的函数?对不起,我真的不擅长这一点:(我相信你也可以在perl脚本中使用它。对不起,我不是perl专家,只是想使用等效的一行逻辑将awk转换为perl。啊,这是正确的,谢谢你指出。awk索引从perl的0开始,而不是从1开始。很抱歉,我坚持:length($F[0]-1)
对于典型的长度(“>cfile”-1)
是长度(0-1)
=长度(-1)
=2。以前的方法对于小文件ID(我们在测试中使用的ID):“>ca”!。您的新命名解决方案更简单、正确。“缩进命令行”“这是一个好主意!@JJoao:感谢您查看此内容和您的有用评论。是否可以将其用作perl脚本中的函数?抱歉,我在这方面做得很差:(我相信您也可以在perl脚本中使用它。很抱歉,我不是perl专家,只是想使用等效的一行逻辑将awk转换为perl。啊,这是正确的,谢谢您指出。awk索引从perl的0开始,而不是从1开始。很抱歉坚持:length($F[0]-1)
对于典型的长度(“>cfile”-1)
islength(0-1)
=length(-1)
=2。之前的方法对于小文件ID(我们在测试中使用的ID:)>ca”!效果很好。您的新命名解决方案更简单、更正确。“缩进命令行”是个好主意!@JJoao:感谢您对此进行研究并提供有用的意见。