Ich habe eine große Textdatei, in der jede Zeile aus drei Zahlen besteht, mit Ausnahme einiger Kommentarzeilen, die alle mit einem Hashtag ( #
) beginnen. Ich möchte überprüfen, ob die nicht kommentierten Zeilen numerisch sortiert sind. Gibt es eine gute Möglichkeit, dies zu tun?
Ich grep -ve \#
gehe davon aus, dass ich alle nicht kommentierten Zeilen mit so etwas wie extrahieren muss - aber wo leite ich dies weiter, um zu überprüfen, ob die Ausgabe sortiert ist?
Hinweis: Ich suche nicht nach einer Möglichkeit, die Datei zu sortieren, sondern zu überprüfen, ob sie bereits sortiert ist (um die Ausgabe eines meiner Programme zu überprüfen). Leider ist dies nicht so häufig wie das Sortieren des Inhalts einer Datei oder (noch mehr) das Auflisten des Inhalts eines Ordners in einer bestimmten Reihenfolge (z. B. alphabetisch oder nach Größe) wenig für mich ...
Erläuterung: Die Zahlen in der Datei sind real, normalerweise in Exponentialform. Ich möchte, dass sie in numerischer Reihenfolge sortiert werden, was zum Beispiel bedeutet 0.11000E+02 > 0.90000E+01 > 0.15000E-01
.
Wenn es etwas vereinfacht, weiß ich, dass wenn die Datei mit dem übereinstimmt, was ich will, die ersten beiden Spalten sortiert werden, wenn sie paarweise gezählt werden - mit anderen Worten, wenn die Datei gültig ist, muss die dritte Spalte überhaupt nicht berücksichtigt werden.
Formal können Sie es so ausdrücken: Wenn x1
und y1
die ersten beiden Zahlen in einer Zeile sind und x2
und y2
die ersten beiden Zahlen in einer anderen Zeile sind, dann (x1,y1)>(x2,y2)
iff (x1>x2) || (x1==x2 && y1>y2)
. (x1,y1)>(x2,y2)
Dies bedeutet, dass die Zeile mit x1
und y1
als größer betrachtet werden sollte, die Zeile mit x2
und y2
und unten in der Datei (x1,y1)
erscheinen sollte . (x2,y2)
Beispieleingabe: Pastebin
Ich erwarte, dass die obige Datei als sortiert betrachtet wird. Wenn jedoch zwei Zeilen (die keine Kommentarzeilen sind) vertauscht werden, wird die Datei nicht mehr sortiert. Beachten Sie, dass Zeilen führende Leerzeichen haben können.