小编ceb*_*561的帖子

使用perl进行DNA分析的基本正则表达式和字符串操作

我是perl的新手,我想做的是我认为对存储在rtf文件中的DNA序列进行一些基本的字符串操作.

基本上,我的文件读取(文件是FASTA格式):

>LM1
AAGTCTGACGGAGCAACGCCGCGTGTATGAAGAAGGTTTTCGGATCGTAA
AGTACTGTCCGTTAGAGAAGAACAAGGATAAGAGTAACTGCTTGTCCCTT
GACGGTATCTAACCAGAAAGCCACGGCTAACTACGTGCCAGCAGCCGCGG
TAATACGTAGGTGGCAAGCGTTGTCCGGATTTATTGGGCGTAAAGCGCGC
GCAGGCGGTCTTTTAAGTCTGATGTGAAAGCCCCCGGCTTAACCGGGGAG
GGTCATTGGAAACTGGAAGACTGGAGTGCAGAAGAGGAGAGTGGAATTCC
ACGTGTAGCGGTGAAATGCGTAGATATGTGGAGGAACACCAGTGGCGAAG
GCGACTCTCTGGTCTGTAACTGACGCTGAGGCGCGAAAGCGTGGGGAGCA
AACAGGATTAGATACCCTGGTAGTCCACGCCGT
Run Code Online (Sandbox Code Playgroud)

我想要做的是读入我的文件并打印标题(标题是> LM1)然后匹配以下DNA序列GTGCCAGCAGCCGC,然后打印前面的DNA序列.
所以我的输出看起来像这样:

>LM1 
AAGTCTGACGGAGCAACGCCGCGTGTATGAAGAAGGTTTTCGGATCGTAA
AGTACTGTCCGTTAGAGAAGAACAAGGATAAGAGTAACTGCTTGTCCCTT
GACGGTATCTAACCAGAAAGCCACGGCTAACTAC
Run Code Online (Sandbox Code Playgroud)

我写了以下程序:

#!/usr/bin/perl

use strict; use warnings;

open(FASTA, "<seq_V3_V6_130227.rtf") or die "The file could not be found.\n";

while(<FASTA>) {
    chomp($_);
    if ($_ =~  m/^>/ ) {
        my $header = $_;
        print "$header\n";
    }

    my $dna = <FASTA>;
    if ($dna =~ /(.*?)GTGCCAGCAGCCGC/) {
        print "$dna";
    }

}
close(FASTA);
Run Code Online (Sandbox Code Playgroud)

问题是我的程序逐行读取文件,我收到的输出如下:

>LM1
GACGGTATCTAACCAGAAAGCCACGGCTAACTAC
Run Code Online (Sandbox Code Playgroud)

基本上我不知道如何将整个DNA序列分配到我的$ dna变量,最终不知道如何避免逐行读取DNA序列.另外我收到此警告:在stacked.pl第14行第1113行使用未初始化的值$ dna进行模式匹配(m //).

如果有人能给我一些帮助来编写更好的代码或指出我正确的方向,我将不胜感激.

perl

5
推荐指数
1
解决办法
2441
查看次数

sed 用字符替换空行

如何使用 sed 用某个字符替换文件中的空行?

我使用了以下命令,但它仍然返回原始输入:

sed 's/^$/>/' filename
Run Code Online (Sandbox Code Playgroud)

原始输入:

ACTCTATCATC

CTACTATCTATCC

CCATCATCTACTC

...
Run Code Online (Sandbox Code Playgroud)

期望的输出:

ACTCTATCATC
>
CTACTATCTATCC
>
CCATCATCTACTC
>
...
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助

bash awk sed

3
推荐指数
1
解决办法
1万
查看次数

sed -n'2〜4p'产生无效代码

大家好,我正在运行以下sed命令...我想从第二行开始提取每4行:

input:
$ sed -n '2~4p' filename

output:
sed: 1: "2~4p": invalid command code ~
Run Code Online (Sandbox Code Playgroud)

有人知道为什么会这样吗?我正在使用mac OSX 10.8

I know the following awk command command will do: $ awk "NR%4==2  {print}"
Run Code Online (Sandbox Code Playgroud)

我很好奇为什么波浪号对此sed命令无效。

unix sed

3
推荐指数
1
解决办法
1362
查看次数

标签 统计

sed ×2

awk ×1

bash ×1

perl ×1

unix ×1