Ich bin nicht sicher, wie ich Zeilen löschen kann, die neuer als das angegebene Datum sind. Hier ist ein Ausschnitt aus dem Inhalt einer Datei.
Buildsave.txt
647919 2013/11/30
647946 2013/11/30
647955 2013/12/01
648266 2013/12/03
648267 2013/12/03
648674 2013/12/04
Ich möchte die Zeilen entfernen, die neuer als 2013/12/03 sind und nur noch übrig bleiben
647919 2013/11/30
647946 2013/11/30
647955 2013/12/01
Wie kann das durch Bash gemacht werden?
bash
text-processing
Jason G.
quelle
quelle
Diese Daten sind lexikografisch und chronologisch gleich sortiert, sodass nur ein lexikalischer Vergleich erforderlich ist:
quelle
Ich gehe davon aus, dass das
<br>
in Ihrer Frage am Ende derdate
Kolumne etwas Unerwünschtes ist. In jedem Fall kann es leicht entfernt werden, wenn es vorhanden ist. Wenn Sie jedoch zum Hauptteil kommen, können Sie erreichen, was Sie versuchen, mit,Mit dem obigen Befehl wird die Ausgabe nun sortiert ausgegeben. Der folgende Befehl sollte nun das geben, wonach Sie suchen.
Erläuterung
Der Befehl sort sortiert die Datei grundsätzlich nach der zweiten Spalte, die das Datum ist. Deshalb habe ich Ihre Eingabedatei geändert, um den Befehl zu testen, ob er funktioniert, da in der Eingabedatei standardmäßig alle Daten sortiert sind. Danach
awk
druckt der Befehl alle Zeilen, bis wir auf eine bestimmte Übereinstimmung stoßen.Testen
Jetzt ist die
sort -k 2n filename.txt
Ausgabe,Jetzt sind wir zufrieden, dass die Datei in der zweiten Spalte sortiert ist. Um nun Werte bis zu einem bestimmten Datum auszuwählen ,
Im obigen Beispiel erhalte ich alle Werte bis
2013/12/03
. Die Ausgabe ist,Nein, das
<br>
ist Teil meiner DateiIn diesem Fall können wir den Befehl wie folgt leicht anpassen.
Also entferne ich einfach alle
<br>
Tags aus der zweiten Spalte und leite dann den oben genannten Befehl weiter.Verweise
https://unix.stackexchange.com/a/11323/47538
https://unix.stackexchange.com/a/83069/47538
quelle
Schnelle und schmutzige Lösung für das eine Datum, das Sie angegeben haben. Löschen Sie einfach alle Zeilen mit sed, die mit Daten übereinstimmen, die nach diesem Datum liegen:
Das -i "" wird direkt in der Datei ersetzt und erstellt kein Backup. Sie können die Testdatei jedoch auch ohne das -i "" durch alle 3 sed-Befehle leiten.
Abhängig von Ihrem System (Linux oder Mac) können Sie das "" nach -i weglassen und manchmal benötigen Sie den Parameter -e für die regulären Ausdrücke. Ich muss versuchen, was für dich funktioniert.
Verwandte Frage mit weiteren Informationen zu sed: /programming/5410757/
quelle
#
ist der Kommentarbefehl insed
, damit diese nichts tun. Verwendensed '\#patter#d'
Sie diese Option, wenn Sie ein anderes RE-Trennzeichen als möchten/
. Das[0-9]*
Teil ist ohne^
Anker überflüssig .-e
wird nur benötigt, wenn Sie mehrere Ausdrücke übergeben möchten. Linux ist ein Kernel, Mac ist eine Computermarke, keiner hat etwas damit zu tunsed
. Der Unterschied besteht zwischen GNUsed
und FreeBSDsed
(das OS / X (wie auf einigen Macs zu finden) geerbt hat).