У меня есть текущий файл журнала, создаваемый для мониторинга файлового пространства. Однако я хочу удалить записи в файле старше 7 дней.Unix - Удаление строк из файла с датой в первом столбце старше 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%/
Существует много помощи там для удаления файлов, которые старше, чем дата х, но ни одно из них удовлетворяют удаление строк в файле на основе тоже самое.
Я нашел пару идей, как: Если рассчитать дату, до которой строки должны игнорироваться перед вызовом 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
Но, еще раз, это не по тому же форматирование даты я использую, и я получаю сообщение об ошибке при попытке запуска этих упомянутых сценариев.
Альтернативный подход: что о том, ваши логах повернута каждый день в полночь? В любом случае, один файл за 24 часа будет намного легче управлять. – xbug
Да, длинные файлы журналов - проблема решена; Я думаю, следует посмотреть на [logrotate] (http://linux.die.net/man/8/logrotate). Возможно, у вашей системы уже есть logrotate, и вам просто нужно отредактировать ее конфигурацию. –