【问题标题】:Bash & awk : Segmentation fault while trying to use bash script arguement in awkBash & awk:尝试在 awk 中使用 bash 脚本参数时出现分段错误
【发布时间】:2021-12-26 07:51:03
【问题描述】:

我正在尝试编写一个脚本来使用 awk 在两个时间戳之间提取日志。

所以这行得通:

awk '$0 >= "07-Nov-2021 13:40:02.124" && $0 <= "07-Nov-2021 13:43:08.124"' websniffer.log

但是当我在 bash 脚本中使用它时,我很难让它发挥作用。这是我的最小示例脚本和错误:

#!/bin/bash

fromtime=$1
totime=$2
nameoffile="websniffer.log"
awk -v fromtimestamp=$fromtime -v totimestamp=$totime -v filenm=$nameoffile '$0 >= "$fromtimestamp" && $0 <= "$totimestamp"}' $filenm

现在当我执行这个脚本时:

#terminal@root$ ./samplescript.sh "07-Nov-2021 13:40:02.124" "07-Nov-2021 13:43:08.124"

我明白了:

 ./samplescript.sh "07-Nov-2021 13:40:02.124" "07-Nov-2021 13:43:08.124"./samplescript.sh "07-Nov-2021 13:40:02.124" "07-Nov-2021 13:43:08.124" ./samplescript.sh: line 6:  2190 Segmentation fault      awk -v fromtimestamp=$fromtime -v totimestamp=$totime -v filenm=$nameoffile '$0 >= "$fromtimestamp" && $0 <= "$totimestamp"}' $filenm

有人可以帮忙解决这个问题吗?

【问题讨论】:

  • 与 shell 不同,在 awk 程序中,您不能使用 $varname 访问变量的值。只需使用varname
  • 您拥有的日期格式无法按 awk 排序。使用time functions 将该时间戳重新格式化为ISO 8601 类型的时间戳。你也可以在 Linux 上使用 GNU date 来做同样的事情。
  • 你确定这就是你所做的一切吗?该脚本有明显的错误,但我没有看到任何会导致 bash 报告分段违规的内容,您应该从该脚本得到的错误是 awk 的语法错误,因为它试图将 13:40:02.124 解释为脚本.如果您的 shell 在该脚本上存在段错误,那么您的 shell 已损坏,您应该获得一个新的。
  • 如果对你有用,请upvote/accept下面的答案。

标签: linux bash shell awk scripting


【解决方案1】:

有几件事:

#!/bin/bash

fromtime=$1
totime=$2
nameoffile="websniffer.log"
awk -v fromtimestamp="$fromtime" -v totimestamp="$totime" '$0 >= fromtimestamp && $0 <= totimestamp' "$nameoffile"

您需要引用传递给 awk 的 shell 变量(其中包含空格),并且无需创建 filenm 并将其传递给 awk,因为您没有在 awk 脚本中使用它。

【讨论】:

  • 谢谢。我试过你的版本,似乎某处有一个空格......不确定它在哪里抱怨空格(如果这是这里的问题)./samplescript.sh "07-Nov-2021 13:40:02.124" "07 -2021 年 11 月 13:43:08.124" awk:cmd。行:1:意外的令牌
  • @JefSmackner - 抱歉,做了更多清理工作。当我不测试东西时,就会发生这种情况。请尝试修改后的版本。
  • @JefSmackner - 修改后的脚本是否符合您的预期?
猜你喜欢
  • 2017-07-25
  • 1970-01-01
  • 1970-01-01
  • 2015-03-21
  • 1970-01-01
  • 2023-03-30
  • 2014-02-02
  • 2013-08-17
  • 1970-01-01
相关资源
最近更新 更多