如何在 awk 中搜索包含空格的模式?

How to search a pattern including the whitespaces in awk?

我想搜索一个有点复杂的模式,我已经学会了我必须指出\|而不是 |在脚本中,但我如何包含空格以匹配这个确切的模式。

    TR40663|c0_g1_i2|m.33339 TR40663|c0_g1_i2|g.33339 ORF TR40663|c0_g1_i2|g.33339 TR40663|c0_g1_i2|m.33339 type:5prime_partial len:1730 (+) TR40663\|c0_g1_i2:3-5192(+) [specie]

我必须使用此代码来检索与 模式相关的序列

    awk 'BEGIN{RS=">";FS="\n"}NR>1{if (~/pattern) print ">"[=11=]}' file

我不知道 ~/ 是否也在搞乱代码。稍后我将传递多个文件中的元素列表,但现在我想先检查这个 pattern/search。

感谢帮助

~/ 不是运算符。 ~ 是正则表达式比较运算符,/.../ 是静态正则表达式定界符。从 ~/ 中删除 /,因为我确信语法错误已经告诉你这样做了。

使用动态正则表达式的语法是:

awk -v re='foo \| bar' '[=10=] ~ re' file

或:

awk -v re='foo [|] bar' '[=11=] ~ re' file

切勿使用 pattern 一词,顺便说一句,因为它含糊不清且具有误导性。在 awk 中,您应该始终使用 regexpstring,而 shell 使用 globbing patterns,它们在功能和语法上与正则表达式相似,但在语义上有很大不同。

如果 pattern 是一个 awk 变量,它包含一个代表正则表达式的字符串,那么你必须写

if ( ~ pattern)

没有斜线

如果 pattern 只是您问题中实际正则表达式的占位符,那么您缺少结尾斜杠:

if ( ~ /pattern\|goes\|here/)

备注:

  • ~/ 不是 awk 运算符
  • 正则表达式匹配运算符是~
  • 文字正则表达式模式用斜杠括起来:/foo.*bar/