簡體   English   中英

Perl從輸入文件中刪除新行並寫入輸出文件

[英]Perl to remove new lines from input file and write to output file

我的輸入是一個包含一系列字符串的文件,如下所示:
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";

但這還行不通。
斷斷續續足以在這種情況下串聯嗎?
如何將創建的內容寫入輸出文件?

您可以使用單行過濾器。

鑒於:

$ 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

因此,似乎您丟失了文件句柄,並且不確定使用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; 線。

perl -pe 'chomp' infile > outfile

如果我猜對了:-)如果您的文件看起來像這樣,包含多個序列,則需要在ID行和序列的最后一行之后保留換行符。

perl 1襯里可能是這樣的:

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

-0777表示將整個文件-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請注意,我沒有使用空文件句柄<>來顯式打開'fasta.txt'。 這將讀取在命令行上指定的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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM