将参数传递给 AWK

js3*_*352 3 awk

我有以下运行良好的 AWK 命令。

awk -v RS="\n+?[$]{4}\n+?" '/HMDB0000008/' test.xt
Run Code Online (Sandbox Code Playgroud)

但是,我想要的是能够从命令行调用它并传递一个参数,以便它可以找到我想要的东西。

例如,这样的事情:

awk -f var=HMDB0000008 RS="\n+?[$]{4}\n+?" '/$var/' test.txt
Run Code Online (Sandbox Code Playgroud)

然而,这似乎不起作用。你能告诉我什么是最好的方法吗?

谢谢

jes*_*e_b 5

awk 不$用于扩展变量,另外它们通过 -v 选项而不是 -f 传递。此外,其中的字符串/.../将被视为正则表达式模式,因此您需要~对整行 ( $0)使用模式匹配运算符:

awk -v var=HMDB0000008 -v RS="\n+?[$]{4}\n+?" '$0 ~ var' test.txt
Run Code Online (Sandbox Code Playgroud)

  • 另外 awk regexp 没有 perl 的 `+?` 操作符。即使它被支持,它在这里也没有多大意义,第一个与 `+` 相比没有任何区别,第二个是多余的,因为非贪婪的 `\n+?` 后跟什么都没有`\n`。(使用正则表达式作为 RS 也不标准/便携) (2认同)