如果字符串小于日期,则生成所有日期或 none
If string is less than date yields all dates or none
我有一个带有自定义日期格式的日志文件,我在其中提取日期以查看它们是否在特定时间段之前,如果是则打印它们。不幸的是,我只能让它打印所有内容或什么都不打印。
deldate=$(date +"%m/%d/%Y %T" -d "-92 hours")
awk '{ if (" " < "$deldate") print , }' srbilltest.txt
echo "Delete Date:" $deldate;
源文件示例。
field1 field2 field3 field4 field5 3/24/2015 1:42:00
field1 field2 field3 field4 field5 3/25/2015 1:42:00
field1 field2 field3 field4 field5 3/26/2015 1:42:00
field1 field2 field3 field4 field5 3/27/2015 1:42:00
您正试图在 awk 脚本中使用 shell 变量,但使用的方式不对。尝试将您的脚本更改为:
deldate=$(date +"%m/%d/%Y %T" -d "-92 hours")
awk -v d="$deldate" '" " < d {print , }' srbilltest.txt
这会在 awk 中创建一个变量 d
,使用 shell 变量 $deldate
的值。请注意 $
s 不用于访问 awk 中变量的值; $
保留用于像您所做的那样访问 </code> 等字段。</p>
<p>顺便说一句,我已经从你的 awk 代码中删除了 <code>if
,因为 awk 程序的结构无论如何都是 condition { action }
。
虽然上面的代码解决了在awk中使用shell变量的问题,但是还有一个问题,就是你的比较会在年份改变的时候失败。您应该考虑将日期格式更改为 ISO 8601 之类的格式,以便它以年份开头。
或者,如果您使用的是 GNU awk,您可以像这样使用 mktime
:
deldate=$(date +%s -d "-92 hours")
awk -v d="$deldate" '{split(,a,"/");split(,b,":")}
mktime(a[3]" "a[1]" "a[2]" "b[1]" "b[2]" "b[3]) < d{print , }' file
根据其他字段的内容,可以更改字段分隔符并避免调用 split
。
我有一个带有自定义日期格式的日志文件,我在其中提取日期以查看它们是否在特定时间段之前,如果是则打印它们。不幸的是,我只能让它打印所有内容或什么都不打印。
deldate=$(date +"%m/%d/%Y %T" -d "-92 hours")
awk '{ if (" " < "$deldate") print , }' srbilltest.txt
echo "Delete Date:" $deldate;
源文件示例。
field1 field2 field3 field4 field5 3/24/2015 1:42:00
field1 field2 field3 field4 field5 3/25/2015 1:42:00
field1 field2 field3 field4 field5 3/26/2015 1:42:00
field1 field2 field3 field4 field5 3/27/2015 1:42:00
您正试图在 awk 脚本中使用 shell 变量,但使用的方式不对。尝试将您的脚本更改为:
deldate=$(date +"%m/%d/%Y %T" -d "-92 hours")
awk -v d="$deldate" '" " < d {print , }' srbilltest.txt
这会在 awk 中创建一个变量 d
,使用 shell 变量 $deldate
的值。请注意 $
s 不用于访问 awk 中变量的值; $
保留用于像您所做的那样访问 </code> 等字段。</p>
<p>顺便说一句,我已经从你的 awk 代码中删除了 <code>if
,因为 awk 程序的结构无论如何都是 condition { action }
。
虽然上面的代码解决了在awk中使用shell变量的问题,但是还有一个问题,就是你的比较会在年份改变的时候失败。您应该考虑将日期格式更改为 ISO 8601 之类的格式,以便它以年份开头。
或者,如果您使用的是 GNU awk,您可以像这样使用 mktime
:
deldate=$(date +%s -d "-92 hours")
awk -v d="$deldate" '{split(,a,"/");split(,b,":")}
mktime(a[3]" "a[1]" "a[2]" "b[1]" "b[2]" "b[3]) < d{print , }' file
根据其他字段的内容,可以更改字段分隔符并避免调用 split
。