如果日期早于指定列的n天,我需要帮助才能删除行。我的文件包含以下内容。从下面的文件中,我需要找到第4列中当前日期不到50天的条目并删除整行。
ABC, 2017-02-03, 123, 2012-09-08
BDC, 2017-01-01, 456, 2015-09-05
Test, 2017-01-05, 789, 2017-02-03
我想要的输出如下。
ABC, 2017-02-03, 123, 2012-09-08
BDC, 2017-01-01, 456, 2015-09-05
注意:我有一个现有脚本,需要将其集成到现有脚本中。
答案 0 :(得分:2)
您可以利用date
命令执行此任务,这将简化脚本
$ awk -v t=$(date -d"-50 day" +%Y-%m-%d) '$4<t' input > output
将在输出文件中包含此内容
ABC, 2017-02-03, 123, 2012-09-08
BDC, 2017-01-01, 456, 2015-09-05
用您的文件名替换输入/输出
答案 1 :(得分:0)
您可以使用下面的gawk
逻辑,
gawk '
BEGIN {FS=OFS=",";date=strftime("%Y %m %d %H %M %S")}
{
split($4, d, "-")
epoch = mktime(d[1] " " d[2] " " d[3] " " "00" " " "00" " " "00")
if ( ((mktime(date) - epoch)/86400 ) > 50) print
}' file
我们的想法是使用GNU Awk
string functions strftime()
and mtkime()
进行日期转换。前者生成YYYY MM DD HH MM SS
格式的时间戳,mktime
用于转换为EPOCH
时间。
两次,即文件中date
的当前时间戳(epoch
)和$4
转换为EPOCH
后,差异除以{{1获取天数差异,只打印差异大于86400
的那些行。