【发布时间】:2014-08-28 11:56:34
【问题描述】:
我的文件在其第 6 个字段中有时间戳,如下所示:Mon Jul 7 14:53:16 PDT 2014
我想从该文件中获取所有这些行,其第 6 个字段值在过去 24 小时内。
示例输入:
abc -> /aa/bbb, hello, /home/user/blah.pl, 516, usc, Mon Jul 4 10:06:33 PDT 2014
abc -> /aa/bbb, hello, /home/user/blah.pl, 516, usc, Mon Jul 5 10:06:33 PDT 2014
abc -> /aa/bbb, hello, /home/user/blah.pl, 516, usc, Mon Jul 7 07:06:33 PDT 2014
abc -> /aa/bbb, hello, /home/user/blah.pl, 516, usc, Mon Jul 7 08:06:33 PDT 2014
abc -> /aa/bbb, hello, /home/user/blah.pl, 516, usc, Mon Jul 7 09:06:33 PDT 2014
abc -> /aa/bbb, hello, /home/user/blah.pl, 516, usc, Mon Jul 7 10:06:33 PDT 2014
字段分隔符是逗号。
示例代码 但它没有按预期工作:
awk 'BEGIN {FS = ","};
{ a=$6;
aint=a +"%y%m%d%H%M%S";
yestint=$(date --date='1 day ago' +"%y%m%d%H%M%S");
if (aint>yestint)
print aint;
}' /location/canzee/textfile.txt
样本输出 我得到这样的输出:
awk: cmd. line:4: yestint=$(date --date=1
awk: cmd. line:4: ^ syntax error
awk: cmd. line:5: (END OF FILE)
awk: cmd. line:5: syntax error
期望的输出
Mon Jul 7 07:06:33 PDT 2014
Mon Jul 7 08:06:33 PDT 2014
Mon Jul 7 09:06:33 PDT 2014
Mon Jul 7 10:06:33 PDT 2014
如果我不能在 awk 命令中调用诸如 date 之类的 shell 命令,我想知道如何解决这个问题。我希望它足够清楚。
【问题讨论】:
-
$(yest)应该是"$yest"。文件中字段 6 的格式是什么?$yest将类似于Sun Jul 6 16:26:09 CDT 2014,我不知道您希望如何将其与<进行比较。 -
awk -v yest=$yest... -
您的变量引用语法已关闭:使用
"$yest"或"${yest}"-$(yest)不是变量引用,而是命令替换。 -
你觉得跟时间戳的格式有关系吗?您可以显示文件中的示例行吗?
-
添加一个显示两个值的调试行,由边界字符包围,例如,
print "a=|"a"|\tyest=|"yest"|"。其他 cmets 也将被观察 ;-) 祝你好运。
标签: awk