【问题标题】:How do I use correctly chomp command to get rid of \n character in perl?如何正确使用 chomp 命令去除 perl 中的 \n 字符?
【发布时间】:2018-01-06 03:36:33
【问题描述】:

我的问题很简单:我有一个如下所示的数据库:

我的目标只是消除每个序列行末尾的换行符 \n,而不是标题,我尝试了以下代码

#!/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 根本不起作用.. 知道我做错了什么吗? 多谢 阿尔弗雷多

【问题讨论】:

  • 请不要发布文字图片。如果我们想剪切和粘贴它以尝试解决您的问题,那是没有用的。
  • 非常感谢@jm666 的提示,实际上我应该开始使用这个 FAST::Bio。
  • @DaveCross,对此感到抱歉,我认为我的问题很愚蠢,已经有了图像,人们可以立即发现错误。我会尽量不这样做。

标签: perl variables implicit chomp


【解决方案1】:

while() 循环存在三个问题。

  • 您在循环开始时无条件地chomp()'ing。
  • 然后您将在循环末尾重新添加换行符 (打败了之前chomp()的目的)。
  • 您将标题连接到每一行。

这是一个简化版。

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 发现了我的原始代码中的错误,即在输入数据库中允许多个序列。

【讨论】:

    【解决方案2】:
    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;
    

    【讨论】:

      猜你喜欢
      • 2010-11-07
      • 1970-01-01
      • 1970-01-01
      • 2011-05-31
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      相关资源
      最近更新 更多