【问题标题】:How do I use awk to match multiple variable patterns?如何使用 awk 匹配多个变量模式?
【发布时间】:2019-01-07 14:33:07
【问题描述】:

我想使用 awk 来匹配多个变量模式。这是我目前所拥有的:

match=`awk -v "$var1\|$var2\|$var3" 'BEGIN{FS=":"; OFS="-"}
$2 ~ {print}' $file`

感谢任何帮助。

【问题讨论】:

  • 建议:请为该样本添加少量输入行和预期输出以及存储在各种变量中的值。这将有助于增加问题的清晰度并用作检查解决方案的测试数据...
  • 编辑问题时,请勿更改。 @anubhava 的答案使用了原始问题中的BEGIN$2,现在它们看起来很奇怪。

标签: regex bash shell awk matching


【解决方案1】:

您需要使用 awk -v var1=val1 语法分别传递 3 个变量,然后在 awk 正则表达式中使用交替作为这个:

match=$(awk -v v1="$var1" -v v2="$var2" -v v3="$var3" 'BEGIN{FS=":"; OFS="-"}
$2 ~ v1 "|" v2 "|" v3' "$file")

【讨论】:

  • 考虑到 shell 变量的各种可能值,这将失败,我们甚至不知道 OP 是否想要进行正则表达式或字符串匹配,因为他使用了模棱两可的术语“模式”来描述类型他想要的匹配,我们也不知道他想要部分匹配还是完整匹配。显然这有可能会做他想做的事,但有更大的机会它只会在一些样本输入上起作用,然后在他的真实数据上失败。顺便说一句,设置 OFS 无济于事。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多