我有这样的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解决方案的情况下直接删除行?
答案 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
。