Ich habe die aktuelle Protokolldatei erstellt, um den Dateibereich zu überwachen. Ich möchte jedoch Datensätze in der Datei entfernen, die älter als 7 Tage sind.Unix - Entfernen von Zeilen aus der Datei mit Datum in der ersten Spalte älter als 7 Tage
Beispiel Protokolldatei (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%/
Es gibt eine Menge Hilfe ist da draußen für das Löschen von Dateien, die älter sind als x aktuell sind, aber keine, die die Entfernung von Zeilen innerhalb einer Datei erfüllen, basierend auf das Gleiche.
Ich habe ein paar Ideen, wie finden: Wenn Sie berechnen das Datum, bis zu dem die Linien ignoriert werden sollen, bevor Sie awk anrufen, dann können Sie dies tun:
awk -v cmpdate=20130628 '{line=$0; dateval=$8;FS="/"; $0=dateval; thisdate=$3*10000+$1*100+$2; if (thisdate>cmpdate) print line; FS=" ";}' file
Von 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;
}
Von 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
Von Grep/awk greater than date
Aber noch einmal, sind diese im Anschluss nicht die gleiche Datumsformatierung ich verwendet habe, und ich habe Fehler wurde erhalten, wenn diese genannten Skripte auszuführen versuchen.
Alternative Ansatz: Was Ihre Logfiles darüber, dass jeden Tag um Mitternacht gedreht? Eine Datei pro 24h wäre wahrscheinlich viel einfacher zu verwalten. – xbug
Ja, lange Protokolldateien sind ein gelöstes Problem; Ich denke, sollte [logrotate] (http://linux.die.net/man/8/logrotate) betrachten. Auf Ihrem System wird möglicherweise bereits logrotate ausgeführt, und Sie müssen lediglich seine Konfiguration bearbeiten. –