如何正确使用 chomp 命令摆脱 perl 中的 \n 字符?
How do I use correctly chomp command to get rid of \n character in perl?
我的问题很简单:我有一个看起来像这样的数据库:
我的目标只是消除每个序列行末尾的换行符 \n,而不是 HEADER,我尝试了以下代码
#!/usr/bin/perl
use strict;
my $db = shift;
my $outfile= "Silva_chomped_for_R_fin.fasta";
my $header;
my $seq;
my $kick = ">";
open(FASTAFILE, $db);
open(OUTFILE,">". $outfile);
while(<FASTAFILE>) {
my $currentline = $_;
chomp $currentline;
if ($currentline =~ m/^$kick/) {
$header = $currentline;
} else {
chomp $currentline;
$seq = $currentline;
}
my $path = $header.$seq."\n";
print(OUTFILE $path);
}
close OUTFILE;
close FASTAFILE;
exit;
但是我得到了以下内容
好像 chomp 根本不起作用..
知道我做错了什么吗?
多谢
阿尔弗雷多
您的 while()
循环存在三个问题。
- 你在循环开始时
chomp()
是无条件的。
- 你就是 re-adding 循环结束时的换行符
(打败前面
chomp()
的目的)。
- 您正在将 header 连接到每一行。
这是一个简化版本。
use strict;
use warnings;
my $db = shift;
my $outfile = "out.fasta";
open(my $fh, "<", $db) or die "Could not open input file";
open(my $out, ">", $outfile) or die "Could not open output file";
my $header;
while (<$fh>) {
$header = /^>/;
chomp unless $header;
print $out $. > 1 && $header && "\n", $_;
}
close $out;
close $fh;
行
print $out $. > 1 && $header && "\n", $_;
如果此行以“>”开头,将有条件地在输出前添加一个换行符 - 除非它是文件中的第一行。 ($.
变量是当前行号。)
来源: ikegami 发现了我的原始代码中的一个错误,即在输入数据库中允许多个序列。
my $add_lf = 0;
while (<>) {
chomp;
if (/^>/) {
print("\n") if $add_lf;
print("$_\n");
$add_lf = 0;
} else {
print;
$add_lf = 1;
}
}
print("\n") if $add_lf;
我的问题很简单:我有一个看起来像这样的数据库:
我的目标只是消除每个序列行末尾的换行符 \n,而不是 HEADER,我尝试了以下代码
#!/usr/bin/perl
use strict;
my $db = shift;
my $outfile= "Silva_chomped_for_R_fin.fasta";
my $header;
my $seq;
my $kick = ">";
open(FASTAFILE, $db);
open(OUTFILE,">". $outfile);
while(<FASTAFILE>) {
my $currentline = $_;
chomp $currentline;
if ($currentline =~ m/^$kick/) {
$header = $currentline;
} else {
chomp $currentline;
$seq = $currentline;
}
my $path = $header.$seq."\n";
print(OUTFILE $path);
}
close OUTFILE;
close FASTAFILE;
exit;
但是我得到了以下内容
好像 chomp 根本不起作用.. 知道我做错了什么吗? 多谢 阿尔弗雷多
您的 while()
循环存在三个问题。
- 你在循环开始时
chomp()
是无条件的。 - 你就是 re-adding 循环结束时的换行符
(打败前面
chomp()
的目的)。 - 您正在将 header 连接到每一行。
这是一个简化版本。
use strict;
use warnings;
my $db = shift;
my $outfile = "out.fasta";
open(my $fh, "<", $db) or die "Could not open input file";
open(my $out, ">", $outfile) or die "Could not open output file";
my $header;
while (<$fh>) {
$header = /^>/;
chomp unless $header;
print $out $. > 1 && $header && "\n", $_;
}
close $out;
close $fh;
行
print $out $. > 1 && $header && "\n", $_;
如果此行以“>”开头,将有条件地在输出前添加一个换行符 - 除非它是文件中的第一行。 ($.
变量是当前行号。)
来源: ikegami 发现了我的原始代码中的一个错误,即在输入数据库中允许多个序列。
my $add_lf = 0;
while (<>) {
chomp;
if (/^>/) {
print("\n") if $add_lf;
print("$_\n");
$add_lf = 0;
} else {
print;
$add_lf = 1;
}
}
print("\n") if $add_lf;