Löschen einer Zeile mit einem Muster
Frage
Hallo Ich möchte eine Zeile aus einer Datei löschen, die bestimmten Muster entspricht der Code Ich verwende ist
BEGIN {
FS = "!";
stopDate = "date +%Y%m%d%H%M%S";
deletedLineCtr = 0; #diagnostics counter, unused at this time
}
{
if( $7 < stopDate )
{
deletedLineCtr++;
}
else
print $0
}
Der Code besagt, dass die Datei hat Linien „!“ getrennt und 7. Feld ist ein Datum yyyymmddhhmmss Format. Das Skript löscht eine Zeile, deren Datum kleiner als das Systemdatum. Aber das funktioniert nicht. Kann jemand mir sagen, der Grund?
Lösung
Ist die awk (1) Zuordnung aufgrund Dienstag? Wirklich, awk ?? : -)
Ok, ich war nicht sicher, was genau Sie waren nach so habe ich einige Vermutungen. Das awk-Programm wird die aktuelle Tageszeit und entfernt dann jede Zeile in der Datei weniger als das. Ich verließ ein Debug-Druck in.
BEGIN {
FS = "!"
stopDate = strftime("%Y%m%d%H%M%S")
print "now: ", stopDate
}
{ if ($7 >= stopDate) print $0 }
$ cat t2.data
!!!!!!20080914233848
!!!!!!20090914233848
!!!!!!20100914233848
$ awk -f t2.awk < t2.data
now: 20090914234342
!!!!!!20100914233848
$
Andere Tipps
Aufruf date
zuerst das formatierte Datum als Parameter zu übergeben:
awk -F'!' -v stopdate=$( date +%Y%m%d%H%M%S ) '
$7 < stopdate { deletedLineCtr++; next }
{print}
END {do something with deletedLineCrt...}
'
Sie müßten wahrscheinlich das Datum Befehl ausgeführt werden sollen - vielleicht mit Backticks - das Datum in stopDate zu bekommen. Wenn Sie stopDate mit dem Code gedruckt wie geschrieben, wäre es enthalten „Datum + ...“, nicht eine Folge von Ziffern. Das ist die eigentliche Ursache des Problems.
Leider ...
Ich kann keine Beweise dafür finden, dass in Backticks einer beliebigen Version von awk arbeiten (alte awk, neue awk, GNU awk). Also, müssen Sie entweder den Code Perl migrieren (Perl wurde ursprünglich als ‚awk-Killer‘ - und nach wie vor enthalten a2p
zu awk-Skripte Perl zu konvertieren), oder Sie müssen überdenken, wie das Datum festgelegt ist
Sehen @ DigitalRoss Antwort, die strftime()
Funktion in gawk
bietet Ihnen die Formatierung, die Sie wollen (Check 'info gaffen' wie ich).
Mit diesem festen, sollten Sie die richtigen Zeilen gelöscht zu werden.