【发布时间】:2016-04-22 06:52:38
【问题描述】:
我正在生成当前日志文件来监视文件空间。但是,我想删除文件中超过 7 天的记录。
示例日志文件 (filesize.log)
4/10/2016 0:03:48 Filesystem 6.0G 2.6G 3.1G 47% /
4/11/2016 0:08:59 Filesystem 6.0G 2.6G 3.1G 47% /
4/13/2016 0:06:41 Filesystem 6.0G 2.6G 3.1G 47% /
4/15/2016 0:00:16 Filesystem 6.0G 2.6G 3.1G 47% /
4/16/2016 0:03:46 Filesystem 6.0G 2.6G 3.1G 47% /
4/17/2016 0:07:53 Filesystem 6.0G 2.6G 3.1G 47% /
4/19/2016 0:02:26 Filesystem 6.0G 2.6G 3.1G 47% /
对于删除早于 x 日期的文件有很多帮助,但没有一个可以满足基于相同删除文件中的行。
我确实找到了一些想法,例如: 如果您在致电之前计算应忽略行的日期 awk 那么你可以这样做:
awk -v cmpdate=20130628 '{line=$0; dateval=$8;FS="/"; $0=dateval; thisdate=$3*10000+$1*100+$2; if (thisdate>cmpdate) print line; FS=" ";}' file
来自https://unix.stackexchange.com/questions/81829/delete-lines-in-a-csv-file-older-than-7-days
#!/bin/bash
head -n+2 filesize.log | {
while read line ; do
tmstmp=$(echo "$line" | awk '{print $8}');
echo "TMSTMP: $tmstmp" "TMDELTA: $(( $(date -d "now" +%s) - $(date -d "$tmstmp" +%s) ))" "TMWINDOW: $(( 604800 ))"
[ $(( $(date -d "now" +%s) - $(date -d "$tmstmp" +%s) )) -lt $(( 604800 )) ] && echo "$line";
done;
}
来自https://unix.stackexchange.com/questions/81829/delete-lines-in-a-csv-file-older-than-7-days
awk 'NF>3{gsub(/-/,"",$NF);if ($NF>d) next}{print $1}' FS="[|@]" d=$(date +%Y%m%d) file
来自Grep / awk greater than date
但是,再一次,这些没有遵循我一直使用的相同日期格式,并且我在尝试运行这些提到的脚本时遇到了错误。
【问题讨论】:
-
替代方法:让您的日志文件每天午夜轮换怎么样?无论如何,每 24 小时一个文件可能会更容易管理。
-
是的,长日志文件是一个已解决的问题;我认为应该看看logrotate。您的系统可能已经运行了 logrotate,您只需编辑其配置即可。
标签: date unix awk unix-timestamp