【问题标题】:Pattern match with stored variable or regular expression in Bash与 Bash 中存储的变量或正则表达式的模式匹配
【发布时间】:2016-02-07 08:52:17
【问题描述】:

由于我是一名生物学家,并且通过修补和编辑此类论坛中的代码来做我的信息学,因此对于新手的错误,我提前道歉。

我一直在尝试迭代文件并在 File2 中搜索模式,而该模式是 File1 中的第一行。我的目标是在模式后追加一行到 outFile 中。

我的第一次尝试是像这样插入正则表达式:

awk 'c&&!--c;/"${head -1 "$File1"}"/{c=1}' "$File2" >> outFile

第二个将模式存储到变量中:

pattern=$(head -1 "$File1")
awk 'c&&!--c;/"$pattern"/{c=1}' "$File2" >> outFile

(File1 和 File2 标有“$”,因为我用 for 循环调用它们。)

但两者都不起作用。如果我直接写模式它工作正常,所以其他一切似乎都很好。

所以我正在处理序列数据,在爆破之后,我得到了 File1 的命中列表,看起来像这样:

BLAST_hit_Jerry
BLAST_hit_Tom
BLAST_hit_Dog
...

现在杰瑞是最棒的。我想提取第一行(BLAST hit Jerry)并在序列文件(File2)中对其进行模式匹配,如下所示:

>BLAST_hit_BugsBunny_andsomethingelse
unique_sequence_BugsBunny
>BLAST_hit_MickyMouse_andsomethingelse
unique_sequence_MickyMouse
>BLAST_hit_Jerry_andsomethingelse
unique_sequence_Jerry
...

我有许多 File1 BLAST 命中文件和相应的 File2 序列文件,我对其进行迭代,并且总是将一个与最高 BLAST 命中相对应的唯一序列文件存储到 outFile 中。 outFile 看起来像:

unique_sequence_Jerry
unique_sequence_from_second_loop_(other sequence corresponding to next top BLAST hit)
unique_sequence ...

感谢您的帮助!

【问题讨论】:

  • 您要匹配的是正则表达式模式还是固定字符串?
  • 我正在尝试匹配正则表达式,它返回字符串(File1 中的第一行)。我刚刚用固定字符串验证了其余代码工作正常。
  • 在文件夹中,我有多个 File1 - File2 对,我对其进行迭代并将输出存储到单个 outFile 中。
  • 感谢您添加示例输入,但它与输出的关系并不完全清楚。您能否显示特定输入的准确输出?

标签: regex bash variables pattern-matching


【解决方案1】:

$pattern 不会在单引号内展开。将值作为awk 变量传递,然后使用~ 运算符来匹配该值。

awk -v p="$pattern" 'c&&!--c; $0 ~ p {c=1}' "$File2" >> outFile

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2016-10-22
    • 1970-01-01
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    • 2020-04-05
    相关资源
    最近更新 更多