【问题标题】:Using s command to subsitute variables使用 s 命令替换变量
【发布时间】:2015-01-25 09:32:33
【问题描述】:

我需要替换一个不正确的 Illumina fasta 标头以在 QIIME 中进行格式化,而这个脚本并不像我想要的那样工作。我需要能够输入变量并使用 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/;

【问题讨论】:

  • 没有's'命令,它更像是一个表达式,寻找某些模式并用不同的指定字符串替换它们。您需要在 fasta 标头中更改什么模式?
  • 您好,欢迎来到本网站。 1) 没有 UNIX s 命令这样的东西;您可能是指 Perl 的 s/// 运算符。 2)您需要向我们展示您的输入和所需的输出。 3) 您需要准确解释您的脚本是如何失败的,以便我们能够提供帮助。 4)您需要解释脚本是如何执行的,带有哪些参数。 5)您需要显示所有相关行。 next_seq() 函数是什么? $seq 在哪里定义?请edit您的问题来解决这些问题。

标签: regex perl text-processing substitution


【解决方案1】:

你那里似乎有一些杂散的单引号:

my $seqName = "foobar";
my $seq_char = "foo";
my $label = "HELLO";
$seqName =~ s/\Q$seq_char/$label/g;
say $seqName;
HELLObar

尝试坚持一种可变风格:您有camelCaseword_style——这是个人喜好,但请选择一个并坚持下去。

另请参阅:http://perldoc.perl.org/perlstyle.html

【讨论】:

    【解决方案2】:

    您的意思是sed 命令吗?

    您也可以使用 Bash one-liner 来做到这一点: 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'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-19
      • 1970-01-01
      • 2023-01-02
      • 2017-04-16
      • 1970-01-01
      • 2022-01-04
      • 1970-01-01
      相关资源
      最近更新 更多