【发布时间】:2019-03-14 17:24:42
【问题描述】:
我知道关于 awk 的两件事:
1.
PAT='aGeneName'
awk -v var="$PAT" '$3 ~ var {print $0}' file.txt # will print the line where 3rd field includes the variable $PAT
2.
awk '$3 ~ /^aGeneName/' file.txt # will print the line where 3rd field starts with string "aGeneName"
但我想要的是这两者的组合:我想打印第三个字段以变量 $PAT 开头的行,类似于
PAT='aGeneName'
awk -v var="$PAT" '$3 ~ /^var/ {print $0}' file.txt # but this is wrong, since variable can't be put into //
【问题讨论】:
-
为什么不只是
PAT='^pattern'? -
谢谢,这在我的简单示例中有效。但这会改变变量,因此在更复杂的情况下,需要将变量作为其原始形式(在本例中为“模式”)重用,这会带来问题
-
不要在软件中使用
pattern这个词进行比较,因为它非常模棱两可。始终使用string或regexp代替(或globbing pattern,如果您在 shell 中匹配文件名),这样您和阅读您的代码或要求的任何人都可以清楚地知道您想要什么样的匹配。 -
谢谢埃德莫顿。你是对的。我已将问题和所选答案中的“模式”更改为“aGeneName”。但是在我编辑了 Tiw 的答案后,它说“在经过同行评审之前,只有你才能看到这个编辑。”希望它很快会被同行评审,所有读者都可以看到修改后的版本。
标签: awk