Ich suche nach einer spezifischeren Version des Befehls :sort u
, die alle doppelten Zeilen aus einer Datei entfernt. Ich arbeite mit einem CSV, und ich möchte alle Zeilen entfernen, wo der zweite Spalteneintrag ein Duplikat hat. Ein Beispiel soll helfen zu verdeutlichen:
sort sollte Folgendes liefern:
%Vor%Hinweis: die spezifischen Zeilen, die beibehalten werden, sind nicht wichtig, solange nach der Sortierung die Einträge der zweiten Spalte alle eindeutig sind
Welcher vim Befehl erzeugt die obige Ausgabe?
Danke!
Da es nicht möglich ist, die Transformation unter der Frage in zu erreichen
ein Durchlauf des Befehls :sort
, betrachten wir ihn als zweistufigen Prozess.
Der erste Schritt besteht darin, die Zeilen nach den Werten der zweiten durch Kommas getrennten Zeile zu sortieren
Säule. Um dies zu tun, können wir den :sort
-Befehl verwenden, indem wir einen regulären übergeben
Ausdruck, der der ersten Spalte und dem folgenden trennenden Komma entspricht.
Als :sort
vergleicht den Text, der unmittelbar nach der Übereinstimmung des angegebenen beginnt
Muster auf jeder Zeile, gibt uns die gewünschte Sortierreihenfolge.
Um die Werte numerisch und nicht lexikographisch zu vergleichen, verwenden Sie das n
-Flag:
Im zweiten Schritt werden die sortierten Zeilen durchlaufen und alle entfernt
sie aber einer unter denen mit dem gleichen Wert in der zweiten Spalte. Es ist
praktisch, um unsere Implementierung auf den Befehl :global
zu bauen
Führt den Ex-Befehl für Linien aus, die einem bestimmten Muster entsprechen. Per Definition,
Eine Zeile kann gelöscht werden, wenn sie in der zweiten Spalte den gleichen Wert enthält wie
die nächste Zeile. Diese Formalisierung (begleitet von der ursprünglichen Annahme)
dass Kommas in Spaltenwerten nicht auftreten können) gibt uns das folgende Muster:
Wenn wir also den Befehl :delete
für jede Zeile ausführen, die diesem Muster entspricht,
Von oben nach unten haben wir nur eine Zeile für jeden einzelnen Wert in der
zweite Spalte.
Beide Schritte können in einem Ex-Befehl kombiniert werden,
%Vor%zuerst nach Spalte mit Index 1 sortieren. zweite Übereinstimmung mit einer beliebigen Zeile, deren Spaltenindex 1 mit dem Spaltenindex 1 der nächsten Zeile übereinstimmt und ihn löscht.
Spaltenindex ist die 1 in {1}
. es wird dreimal wiederholt.
mit der zweiten Spalte
%Vor%mit der dritten Spalte
%Vor%oder
%Vor%Oder
%Vor%oder Überspringe die ersten beiden Wörter in jeder Zeile und sortiere mit folgendem:
%Vor%oder
nach der letzten Spalte sortieren
%Vor%ODER VERWENDEN SIE EIN ANDERES PROGRAMM, wie MS OFFICE oder OPENOFFICE
Tags und Links vim