【发布时间】: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