我需要在QIIME中替换不正确的Illumina fasta标头以进行格式化,并且此脚本不能像我想的那样工作。我需要能够输入变量并使用unix“s”命令。有什么想法吗?
print 'What is the exact sequence of characters to replace? ';
chomp (my $seq_char = <> );
print 'What is the new label to attach? ';
chomp (my $label = <> );
while( $seq = $seq_in->next_seq() )
{
my $seqName = $seq->id;
$seqName =~ s/\'$seq_char'/\'$label' /g; #replace original characters with new label
$seqName =~ s/(gi\.\w*)\..*/$1/;
答案 0 :(得分:1)
你似乎有一些流浪的单引号:
my $seqName = "foobar";
my $seq_char = "foo";
my $label = "HELLO";
$seqName =~ s/\Q$seq_char/$label/g;
say $seqName;
HELLObar
尝试坚持使用一种变量样式:你有camelCase
和word_style
- 这是个人偏好,但选择一个并坚持下去。
答案 1 :(得分:0)
你的意思是sed
命令吗?
你也可以使用Bash单线程:
cat {your_file} | sed 's/\(gi\.\w*\)\..*/\1/' | sed 's/$seq_char/$label /g'
请注意正则表达式模式,例如:
echo gi.1234562.123124 | sed 's/\(gi\.\w*\)\..*/\1/'
输出
gi.1234562
并且将使用sed 's/$seq_char/$label /g'