我的fasta文件
>1a17_A a.118.8 TPR-like
PADGALKRAEELKTQANDYFKAKDYENAIKFYSQAIELNPSNAIYYGNRS
LAYLRTECYGYALGDATRAIELDKKYIKGYYRRAASNMALGKFRAALRDY
ETVVKVKPHDKDAKMKYQECNKIVKQKAFERAIAGDEHKRSVVDSLDIES
MTIEDEYS
否则请尝试使用http://www.ncbi.nlm.nih.gov/nuccore/?term=keratin来获取fasta文件。
open(fas,'d:\a4.fas');
$s=<fas>;
@fasta = <fas>;
@r1 = grep{s/\s//g} @fasta; #It is not remove the white space
@r2 = grep{s/(\s)$//g} @fasta; #It is not working
@r3 = grep{s/.$//g} @fasta; #It is remove the last character, but not remove the last space
print "@r1\n@r2\n@r3\n";
这些代码的输出是:
PADGALKRAEELKTQANDYFKAKDYENAIKFYSQAIELNPSNAIYYGNRS LAYLRT
ECYGYALGDATRAIELDKKYIKGYYRRAASNMALGKFRAALRDY ETVVKVKPHDKDAKMKYQECNKIVKQKAFERAIAG
DEHKRSVVDSLDIES MTIEDEYS
我希望从第2行和第2行删除空格。我该怎么办?
答案 0 :(得分:3)
使用perl one liner,
perl -i -pe 's|[ \t]||g' a4.fas
删除所有空格,包括新行
perl -i -pe 's|\s||g' a4.fas
答案 1 :(得分:1)
use strict;
use warnings;
while(my $line = <DATA>) {
$line =~ s/\s+//g;
print $line;
}
__DATA__
PADGALKRAEELKTQANDYFKAKDYENAIKFYSQAIELNPSNAIYYGNRS
LAYLRTECYGYALGDATRAIELDKKYIKGYYRRAASNMALGKFRAALRDY
ETVVKVKPHDKDAKMKYQECNKIVKQKAFERAIAGDEHKRSVVDSLDIES
MTIEDEYS
答案 2 :(得分:1)
grep
是对数组进行更改的错误选择。它过滤输入数组的元素,仅作为输出传递大括号{ .. }
中的表达式为 true 的元素。
替换s///
true ,除非它没有对目标字符串进行任何更改,因此对grep
语句没有任何更改,
@r1 = grep { s/\s//g } @fasta
这将从@fasta
中的字符串中删除所有空格,包括换行符。它只在@r1
中放入那些最初包含空格的元素,这些元素可能全部都以新行结尾。
@r2 = grep { s/(\s)$//g } @fasta
由于锚$
,如果它是一个空格字符,这将删除字符串末尾换行符之前的字符。它还删除了换行符。字符串结尾之前的任何空格都是不变的。它只在@r2
中放入以空格结尾的那些元素,这些元素可能全部以新行结束。
@r3 = grep { s/.$//g } @fasta;
这将删除换行符之前的字符,无论它是否为空格。它离开换行符,以及结束前的任何空格。它只在@r3
中放入那些不仅仅包含换行符的元素,这些换行符可能都是新行。
我认为您希望保留换行符(通常被视为空格)。
此示例将读取除标题之外的整个文件到变量$data
,然后使用tr///
删除空格和制表符。
use strict;
use warnings;
use 5.010;
use autodie;
my $data = do {
open my $fas, '<', 'D:\a4.fas';
<$fas>; # Drop the header
local $/;
<$fas>;
};
$data =~ tr/ \t//d;
print $data;
答案 3 :(得分:1)
\h
匹配任何被认为是水平空格的字符;这包括平台的空格和制表符以及下表中列出的其他几个字符。\H
匹配任何不被视为水平空格的字符。他们使用平台的本机字符集,不考虑任何可能正在使用的语言环境。
因此,以下内容将显示删除了水平间距的文件:
perl -pe "s|\h+||g" d:\a4.fas
如果您不想显示标题,只需添加$.
的条件
perl -ne "s|\h+||g; print if $. > 1" d:\a4.fas
注意:我在上述命令中使用了双引号,因为您的D:\
音量意味着您很可能在Windows上。