【问题标题】:AWK find exact match from environment variableAWK 从环境变量中找到完全匹配
【发布时间】:2021-03-04 04:26:04
【问题描述】:

我想知道如何使用 AWK 找到环境变量的完全匹配。

我的环境变量是ESSID="Super asdf"

我的文件也是一个变量 ($AIRODUMP_2G_LOG),包含以下两行(以及许多其他行):

E4-7A-19-80-01-CC, 2020-11-16 08:58:07, 2020-11-16 08:58:35,  8,  54, WPA2, CCMP, PSK, -81,       81,        5,   0.  0.  0.  0,  14, Super asdf,
EE-80-6B-70-C1-EF, 2020-11-16 08:58:07, 2020-11-16 08:58:36,  8,  54, WPA2, CCMP TKIP, PSK, -81,       79,        0,   0.  0.  0.  0,  18, Super asdf_EXT,

我目前的 AWK 搜索功能如下: awk -F, '($14 ~ ENVIRON["ESSID"]) {print $0}' $AIRODUMP_2G_LOG

使用该搜索功能,它会显示上面显示的这两行,但我真的只想要最后没有_EXT 的那一行。对于我的生活,我无法弄清楚如何使用以 ($) 结尾的搜索功能,只需使用我的环境变量 Super asdf。我知道如果我将搜索功能更改为 awk -F, '$14 ~ /f$/ {print $14}' "$AIRODUMP_2G_LOG" 它会起作用,但我想在 AWK 中使用 env-var。

编辑: 抱歉,我的代码应该是 $14 == ENVIRON["ESSID"],如下评论中所述。

【问题讨论】:

  • {print $0} 是 awk 在仅给定条件时的默认操作;因此,您可以忽略它。
  • 我实际上想打印 1 和 4,但我在写问题时忽略了这一点。不太清楚为什么我被标记了,也许我应该提到== 对我不起作用?
  • 不是我的反对意见;不能说。不必担心偶尔会出现无缘无故的、无法解释的投反对票——请记住,每次投赞成票所获得的声望都比投反对票的成本高得多。

标签: bash awk


【解决方案1】:

当您想要完全匹配时,从 ~ 切换到 ==

awk -F',[[:space:]]*' '$14 == ENVIRON["ESSID"]' "$AIRODUMP_2G_LOG"

【讨论】:

  • 由于某种原因,它仍然无法通过== 找到它。不知道为什么,就是那个字符串部分的全部内容
  • 您的数据中有空格,而不仅仅是逗号。让它-F',[[:space:]]*'
猜你喜欢
  • 2012-08-12
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 2021-08-05
  • 2016-02-12
  • 2013-09-17
  • 2018-01-23
  • 2020-11-06
相关资源
最近更新 更多