【发布时间】:2021-03-21 19:58:17
【问题描述】:
示例输入文件(制表符分隔的列):
1ea73495-490d-6dda-9b30-afa37288d418 00627 a1
1ea73495-490d-6dda-9b30-afa37288d418 006273 a2
1ea73495-490d-6dda-9b30-afa37288d418 000627 a3
1ea73495-4b42-6ee8-98fc-338d6d9414f1 00673 a4
我需要找到第二列为 00627 或 00673 的所有行。 以下命令我得到所有行:
$ awk -F$'\t' -vu="00627|00673" '$2~u' input
1ea73495-490d-6dda-9b30-afa37288d418 00627 a1
1ea73495-490d-6dda-9b30-afa37288d418 006273 a2
1ea73495-490d-6dda-9b30-afa37288d418 000627 a3
1ea73495-4b42-6ee8-98fc-338d6d9414f1 00673 a4
以下命令失败:
$ awk -F$'\t' -vu="00627|00673" '$2~^u$' input
awk: cmd. line:1: $2~^u$
awk: cmd. line:1: ^ syntax error
$ awk -F$'\t' -vu="00627|00673" '$2~^(u)$' input
awk: cmd. line:1: $2~^(u)$
awk: cmd. line:1: ^ syntax error
awk: cmd. line:2: $2~^(u)$
awk: cmd. line:2: ^ unexpected newline or end of string
$ awk -F$'\t' -vu="00627|00673" '$2~/^(u)$/' input
$
更新:我找到了使用 shell 变量的解决方案:
$ list="00627|00673"
$ awk -F$'\t' -vu="00627|00673" '$2~/^('"$list"')$/' input
1ea73495-490d-6dda-9b30-afa37288d418 00627 a1
1ea73495-4b42-6ee8-98fc-338d6d9414f1 00673 a4
$
【问题讨论】:
-
如果您想要完全匹配,请不要使用
~。请改用==。 -
不幸的是,== 没有返回:awk -F$'\t' -vu="00627|00673" '$2==u' 输入
标签: awk