如何按日期列删除超过7天的行?

时间:2015-05-18 14:46:16

标签: bash csv awk

我有这样的csv文件:

DATE,DATA1,DATA2
16.05.2015,/home/spy,grid.csv
16.05.2015,/home/ora,grid2.csv
16.05.2015,/home/ted,grid3.csv
05.05.2015,/home/old,iamold.delete.me

我需要检查DATE值,如果它超过7天,请删除此行。

我尝试这样(秒数)

while read -r line;
do
line2=${line}

now=$(date +"%s")

lines=$(awk -F, '{print $1}' $line2) 

linedate=$(date --date="$lines" +"%s")

(( diff = (now - linedate) / 86400 ))

done < "csvfile.csv"

我怎样才能更容易?如何在没有mv / tmp解决方案的情况下直接删除行?

1 个答案:

答案 0 :(得分:1)

使用GNU awk进行时间函数:

$ awk -F'[,.]' 'NR==1 || (systime()-mktime($3" "$2" "$1" 0 0 0")) <= 7*24*60*60' file
DATE,DATA1,DATA2
16.05.2015,/home/spy,grid.csv
16.05.2015,/home/ora,grid2.csv
16.05.2015,/home/ted,grid3.csv

如果您需要保存几个字符或仅使用-i inplace来执行任何命令,请使用> tmp && mv tmp file