Perl从输入文件中删除新行并写入输出文件

时间:2016-09-27 15:47:40

标签: perl concatenation bioinformatics

我的输入是一个包含一系列字符串的文件,如下所示:
ABCDEFGHIJKL
XKGKASKGKD
SGJKSKGS

我想删除新行并将输出写入新文件:ABCDEFGHIJKLXKGKASKGKDSGJKSKGS

到目前为止,我有这个:

#! /usr/bin/perl
use strict;
use warnings;
my $input = $ARGV[0];
my $output = "concatenated.txt"; #Output sequence
#Open output file
open >"$output"; or die "unable to open $output";
#Open input file
open "<$input" or die "unable to open $input";

while (<INPUT>) {
   if( /^[AGCT]/)
   chomp;

print $output;
}

close $input;

close $output;


print "Done!\n";

但它还没有用。
在这种情况下,是否足够连接? 如何将我创建的内容写入输出文件?

4 个答案:

答案 0 :(得分:3)

您可以使用单行过滤器。

假设:

$ cat /tmp/so.txt
ABCDEFGHIJKL
XKGKASKGKD
SGJKSKGS

Perl(使用-0777吞下整个文件):

$ perl -0777 -lpe 's/\s+//g;' /tmp/so.txt > /tmp/out.txt

或者,如果你不想“吞咽”:

$ perl -pe 's/\s+//g' /tmp/so.txt > /tmp/out.txt

tr如果只是新行:

$ tr -d '\n' < /tmp/so.txt > /tmp/out.txt

其中任何一个:

$ cat /tmp/out.txt
ABCDEFGHIJKLXKGKASKGKDSGJKSKGS

答案 1 :(得分:2)

所以,看起来你错过了文件句柄,我不确定你要用if语句完成什么。但是这里有一些代码可以提取您的输入并为您提供上面的输出:

use strict;
use warnings;

my $input = $ARGV[0];
my $output = "concatenated.txt"; #Output sequence

#Open output file
open (my $OUTPUT, '>', $output) or die "unable to open $output";
#Open input file
open (my $INPUT, '<', $input) or die "unable to open $input";

while (<$INPUT>) {
    chomp;
    $_ =~ s/\s+//g;
    print $OUTPUT $_;
}

close $input;
close $output;
print "Done!\n";

如果您只想删除换行符并保留剩余的空格,则可以删除$_ =~ s/\s+//g;行。

答案 2 :(得分:1)

perl -pe 'chomp' infile > outfile

答案 3 :(得分:1)

如果我猜对了:-)如果你的文件看起来像这个序列多于1个,你需要在id行和序列的最后一行之后保留换行符。

perl 1衬里可能是这样的:

perl -0777 -pe 's/^[TAGC]+\K\n(?!>)//gm' fasta.txt > concatenated.txt

-0777表示将整个文件篡改为一个字符串。

此替换表示从该行的开头开始匹配所有[TAGC](使用\K,保留所有内容,不要删除)。然后是一个未跟\n后跟的换行符>,(以下行的开头是id)。

这会删除新行,前提是它是一个序列行,而不是新的id行。 g开关表示全局执行此操作,m开关允许插入符号^的开头匹配,而不是通常的行为,在字符串的开头匹配。

>NR_037701 1
AGGAGCTATGAATATTAATGAAAGTGGTCCTGATGCATGCATATTAAACA
TGCATCTTACATATGACACATGTTCACCTTGGGGTGGAGACTTAATATTT
AAATATTGCAATCAGGCCCTATACATCAAAAGGTCTATTCAGGACATGAA
GGCACTCAAGTATGCAATCTCTGTAAACCCGCTAGAACCAGTCATGGTCG
GTGGGCTCCTTACCAGGAGAAAATTACCGAAATCACTCTTGTCCAATCAA
AGCTGTAGTTATGGCTGGTGGAGTTCAGTTAGTCAGCATCTGGTGGAGCT
GCAAGTGTTTTAGTATTGTTTATTTAGAGGCCAGTGCTTATTTAGCTGCT
AGAGAAAAGGAAAACTTGTGGCAGTTAGAACATAGTTTATTCTTTTAAGT
GTAGGGCTGCATGACTTAACCCTTGTTTGGCATGGCCTTAGGTCCTGTTT
GTAATTTGGTATCTTGTTGCCACAAAGAGTGTGTTTGGTCAGTCTTATGA
CCTCTATTTTGACATTAATGCTGGTTGGTTGTGTCTAAACCATAAAAGGG
AGGGGAGTATAATGAGGTGTGTCTGACCTCTTGTCCTGTCATGGCTGGGA
ACTCAGTTTCTAAGGTTTTTCTGGGGTCCTCTTTGCCAAGAGCGTTTCTA
TTCAGTTGGTGGAGGGGACTTAGGATTTTATTTTTAGTTTGCAGCCAGGG
TCAGTACATTTCAGTCACCCCCGCCCAGCCCTCCTGATCCTCCTGTCATT
CCTCACATCCTGTCATTGTCAGAGATTTTACAGATATAGAGCTGAATCAT
TTCCTGCCATCTCTTTTAACACACAGGCCTCCCAGATCTTTCTAACCCAG
GACCTACTTGGAAAGGCATGCTGGGTCTCTTCCACAGACTTTAAGCTCTC
CCTACACCAGAATTTAGGTGAGTGCTTTGAGGACATGAAGCTATTCCTCC
CACCACCAGTAGCCTTGGGCTGGCCCACGCCAACTGTGGAGCTGGAGCGG
GAGGGAGGAGTACAGACATGGAATTTTAATTCTGTAATCCAGGGCTTCAG
TTATGTACAACATCCATGCCATTTGATGATTCCACCACTCCTTTTCCATC
TCCCAGAAGCCTGCTTTTTAATGCCCGCTTAATATTATCAGAGCCGAGCC
TGGAATCAAACTGCCTCTTTCAAAACCTGCCACTATATCCTGGCTTTGTG
ACCTCAGCCAAGTTGCTTGACTATTCTCAGTCTCAGTTTCTGCACCTGTC
AAATAGGGTTTATGTTAACCTAACTTTCAGGGCTGTCAGGATTAAATGAG
CATGAACCACATAAAATGTTTGGTGTATAGTAAGTGTACAGTAAATACTT
CCATTATCAGTCCCTGCAATTCTATTTTTCTTCCTTCTCTACACAGCCCC
TGTCTGGCTTTAAAATGTCCTGCCCTGCTTTTTATGAGTGGATACCCCCA
GCCCTATGTGGATTAGCAAGTTAAGTAATGACACTCAGAGACAGTTCCAT
CTTTGTCCATAACTTGCTCTGTGATCCAGTGTGCATCACTCAAACAGACT
ATCTCTTTTCTCCTACAAAACAGACAGCTGCCTCTCAGATAATGTTGGGG
GCATAGGAGGAATGGGAAGCCCGCTAAGAGAACAGAAGTCAAAAACAGTT
GGGTTCTAGATGGGAGGAGGTGTGCGTGCACATGTATGTTTGTGTTTCAG
GTCTTGGAATCTCAGCAGGTCAGTCACATTGCAGTGTGTCGCTTCACCTG
GCTCCCTCTTTTAAAGATTTTCCTTCCCTCTTTCCAACTCCCTGGGTCCT
GGATCCTCCAACAGTGTCAGGGTTAGATGCCTTTTATGGGCCACTTGCAT
TAGTGTCCTGATAGAGGCTTAATCACTGCTCAGAAACTGCCTTCTGCCCA
CTGGCAAAGGGAGGCAGGGGAAATACATGATTCTAATTAATGGTCCAGGC
AGAGAGGACACTCAGAATTTCAGGACTGAAGAGTATACATGTGTGTGATG
GTAAATGGGCAAAAATCATCCCTTGGCTTCTCATGCATAATGCATGGGCA
CACAGACTCAAACCCTCTCTCACACACATACACATATACATTGTTATTCC
ACACACAAGGCATAATCCCAGTGTCCAGTGCACATGCATACACGCACACA
TTCCCTTCCTAGGCCACTGTATTGCTTTCCTAGGGCATCTTCTTATAAGA
CACCAGTCGTATAAGGAGCCCACCCCACTCATCTGAGCTTATCAACCAAT
TACATTAGGAAAGACTGTATTTCCTAGTAAGGTCACATTCAGTAGTACTG
AGGGTTGGGACTTCAACACAGCTTTTTGGGGGATCATAATTCAACCCATG
ACAGCCACTGAGATTATTATATCTCCAGAGAATAAATGTGTGGAGTTAAA
AGGAAGATACATGTGGTACAAGGGGTGGTAAGGCAAGGGTAAAAGGGGAG
GGAGGGGATTGAACTAGACACAGACACATGAGCAGGACTTTGGGGAGTGT
GTTTTATATCTGTCAGATGCCTAGAACAGCACCTGAAATATGGGACTCAA
TCATTTTAGTCCCCTTCTTTCTATAAGTGTGTGTGTGCGGATATGTGTGC
TAGATGTTCTTGCTGTGTTAGGAGGTGATAAACATTTGTCCATGTTATAT
AGGTGGAAAGGGTCAGACTACTAAATTGTGAAGACATCATCTGTCTGCAT
TTATTGAGAATGTGAATATGAAACAAGCTGCAAGTATTCTATAAATGTTC
ACTGTTATTAGATATTGTATGTCTTTGTGTCCTTTTATTCATGAATTCTT
GCACATTATGAAGAAAGAGTCCATGTGGTCAGTGTCTTACCCGGTGTAGG
GTAAATGCACCTGATAGCAATAACTTAAGCACACCTTTATAATGACCCTA
TATGGCAGATGCTCCTGAATGTGTGTTTCGAGCTAGAAAATCCGGGAGTG
GCCAATCGGAGATTCGTTTCTTATCTATAATAGACATCTGAGCCCCTGGC
CCATCCCATGAAACCCAGGCTGTAGAGAGGATTGAGGCCTTAAGTTTTGG
GTTAAATGACAGTTGCCAGGTGTCGCTCATTAGGGAAAGGGGTTAAGTGA
AAATGCTGTATAAACTGCATGATGTTTGCAGGCAGTTGTGGTTTTCCTGC
CCAGCCTGCCACCACCGGGCCATGCGGATATGTTGTCCAGCCCAACACCA
CAGGACCATTTCTGTATGTAAGACAATTCTATCCAGCCCGCCACCTCTGG
ACTCCCTCCCCTGTATGTAAGCCCTCAATAAAACCCCACGTCTCTTTTGC
TGGCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAA
>NM_198399 1
AACAGATTTTAACTCTGAAAAGCCATTTCCAGTGTCTATAGACTATTGTG
AGCCTGGAGAAGTAGCATTTAGTTGGGATAGCTTCACTAGAGCTGCCTGC
CAAAGACTTCCTTCCACAGGATCTTGTCGCACCAGCAACTGACAGGAGCT
TGGGAGCTCGGGAGCTTGGGAGAGGGCTTATGTTTTTAATAATGTAGCTG
TCAGTTCGAAGCCTGGAAATGTTGACCCTCAAAGGGCATAAAATCTTGTT
ATTTTAATTTGCATCTGGGAGAATGTCTGAGCAAGGAGACCTGAATCAGG
CAATAGCAGAGGAAGGAGGGACTGAGCAGGAGACGGCCACTCCAGAGAAC
GGCATTGTTAAATCAGAAAGTCTGGATGAAGAGGAGAAACTGGAACTGCA
GAGGCGGCTGGAGGCTCAGAATCAAGAAAGAAGAAAATCCAAGTCAGGAG
CAGGAAAAGGTAAACTGACTCGCAGCCTTGCTGTCTGTGAGGAATCTTCT
GCCAGACCAGGAGGTGAAAGTCTTCAGGATCAGACTCTCTGAAAACTGCA
AATGGAAAGGAATTCAAAAGAATTTAGATTAAAAGTTAAATAAAAAGTAG
GCACAGTAGTGCTGAATTTTCCTCAAAGGCTCTCTTTTGATAAGGCTGAA
CCAAATATAATCCCAAGTATCCTCTCTCCTTCCTTGTTGGAGATGTCTTA
CCTCTCAGCTCCCCAAAATGCACTTGCCTATAAGAAACACAATTGCTGGT
TCATATGAAACTTAGGAAATAGTGAATAAGGTGCATTTAACTTTGGAGAA
ATACTTTTATGGCTTTGGTGGAGATTTCTCAATACTGCAAAAGTTGTCCA
GAAATGAATCTGAGCTGATGGTGACTTTAAGTTAATATTATTAATATATC
ACTGCATATTTTTACCCTTATTTTTGCTCCTTACAGCAAGATTAGTAGGT
TATAAAAATTTAAATTTAAACAAAATTATTTCATGACAAAATGGGAAACT
TCACATCATACTTATTTTTGTTTGCCTTTCAGGCATCATATTAGCTTTTA
TAAAAAATGGTCTTGCTGCTGAAATTGTACTTATTTTATCAGAGGCTGGG
TGCAGTCAAGACAAAAGTAAAATGGTTTACCTGAGCCCAGGGGAGGGAAA
ATTGATTAAGATATCATTATTTTTGTTTGGTTTGGTTTTGCTTTTTTCCT
CTTACTTTAATTGAAATACTCTGAATTCCCCTCATGGAAACAGAGAGCAT
TGAGAGCACTTTCTTTAAAAGGACCAAAAATAAATTCCTAATAGATTTTG

更新如果您需要脚本中的解决方案,则以下内容将产生与命令行相同的结果。

命令行为perl yourscript.pl fasta.txt 请注意,我没有明确打开&#39; fasta.txt&#39;,而是使用了空文件句柄<>。它读取命令行中指定的fasta文件。

#!/usr/bin/perl
use strict;
use warnings;

# Output sequence
my $output = "concatenated.txt";

open my $handle, '>', $output or die "unable to open $output";

my $current = <>;

while (my $next = <>) {

    # if current line is seq characters (not a header)
    # AND the next line isn't a header
    if (substr($current, 0, 1) ne '>' && substr($next, 0, 1) ne '>') {
        chomp($current)
    }

    print $handle $current;
    $current = $next;

    # print last line if at the end of file
    print $handle $current if eof;
}