【发布时间】:2018-11-07 20:03:05
【问题描述】:
我有一系列使用csv 格式的日志文件,每行的第一个字段由双引号括起来的时间戳组成,如下所示:
"2018-10-12 00:08:28",248351,1659.912,1.145031,6.180728
"2018-10-13 02:14:16",248486,243.657,0.513548,9.661507
"2018-10-13 22:31:52",248920,1014.364,0.357985,4.153846
"2018-10-14 06:19:31",249035,629.172,1.668043,8.029534
我正在使用bash 脚本来操作这些日志文件,并包括awk 以根据时间戳选择指定范围内的记录。双引号不能很好地播放,所以我必须将它们转义如下以提取适当的行:
awk '
BEGIN { FS=","; ts="\"2018-10-13 00:00:00\""; st="\"2018-10-14 00:00:00\"" }
$1>=ts && $1<st { print $0 }
' $file.in > $file.out
我想将时间戳指定为我的 shell 脚本的参数,而不是将它们硬编码在脚本中,但是我无法弄清楚如何将此移交给 @987654326 @ 在脚本中,尤其是在考虑字段值中必要的双引号时。
在我的bash 脚本中,我尝试创建变量ts 和st,其中时间戳字符串表示开始和结束边界,然后在稍后对awk 的调用中引用这些变量。
ts="\"2018-10-13 00:00:00\""
st="\"2018-10-14 00:00:00\""
这不起作用:
awk '
BEGIN { FS=","; ts=${ts}; st=${st} }
$1>=st && $1<st { print $0 }
' $file.in > $file.out
这也不行:
awk '
BEGIN { FS="," }
$1>=${ts} && $1<${st} { print $0 }
' $file.in > $file.out
我怀疑这里可能有两个问题:
- 如何在
awk命令中使用bash脚本参数(或bash变量)? - 如何处理作为字段值一部分的双引号?
【问题讨论】:
标签: bash shell awk parameter-passing double-quotes