現在のログファイルを作成してファイルスペースを監視しています。しかし、7日以上経過したファイルのレコードを削除したい。基づいて、ファイル内の行の削除を満たすUnix - 最初の列の日付が7日より古い行を削除する
例ログファイル多くの援助がそこにX日より古いファイルを削除するためにあります
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%/
(filesize.log)が、どれも同じ。
私のようなアイデアのカップルを見つけた: あなたは、あなたがこれを行うことができます のawkを呼び出す前に、行は無視されなければならないためにどの日付を計算する場合:https://unix.stackexchange.com/questions/81829/delete-lines-in-a-csv-file-older-than-7-days
から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;
}
から
awk 'NF>3{gsub(/-/,"",$NF);if ($NF>d) next}{print $1}' FS="[|@]" d=$(date +%Y%m%d) file
しかし、再び、これらは私が使用されており、これら言及したスクリプトを実行しようとしたとき、私はエラーになってきているの書式と同じ日に、次のされていません。
代替アプローチ:あなたのログファイルを持っていることについて深夜に毎日の回転何を?とにかく24時間ごとに1つのファイルを管理する方がはるかに簡単です。 – xbug
ええ、長いログファイルは解決された問題です。私は[logrotate](http://linux.die.net/man/8/logrotate)を見てください。あなたのシステムはすでにlogrotateを実行していて、その設定を編集するだけで済みます。 –