Warum sind die Sortieroptionen -c (prüfen, ob sortiert ist) und -o (in Ausgabedatei schreiben) nicht kompatibel?

Warum sind die Sortieroptionen -c (prüfen, ob sortiert ist) und -o (in Ausgabedatei schreiben) nicht kompatibel?

Ich sortiere eine große Anzahl von Dateien nacheinander. Mit sort -o file file. Die For-Schleife wurde auf halbem Weg angehalten und vor dem Neustart möchte ich die Sortieroption verwenden, -cum das Sortieren zu beschleunigen. Aber es heißt, dass die -coOptionen nicht kompatibel sind. Warum ist das so?

sort --version
sort (GNU coreutils) 8.13

OS: Ubuntu 12.10

Antwort1

Weil Sie sagen, dass Sie nur --check verwenden möchten, das keine Ausgabe erzeugt, und Sie geben auch an, dass die sortierte --Ausgabe in eine bestimmte Datei gehen soll. Dies sind sich gegenseitig ausschließende Konzepte, und sie werden in sort.c (gnu coreutils 8.20) mit erzwungen

  if (checkonly)
    {

      if (outfile)
        {
          static char opts[] = {0, 'o', 0};
          opts[0] = checkonly;
          incompatible_options (opts);
        }

Antwort2

Vorausgesetzt, Sie verwenden GNU sort, bewirken die von Ihnen genannten Optionen Folgendes:

   -c, --check, --check=diagnose-first
          check for sorted input; do not sort
   -o, --output=FILE
          write result to FILE instead of standard output

Das -cFlag informiert Sie lediglich darüber, ob die Eingabe bereits sortiert ist oder nicht:

$ echo -e "A\nB\nC" | sort -c
$ echo -e "A\nC\nB" | sort -c
sort: -:3: disorder: B

Wenn also die Eingabe sortiert ist, wird nichts gedruckt, und wenn die Eingabe nicht sortiert ist, wird eine Fehlermeldung an die Standardfehlerausgabe gesendet. Mit anderen Worten: Es sort -cwird nie an die Standardausgabe gesendet. Da nie gedruckt wird, ergibt es wenig Sinn, die Ausgabe umzuleiten.

Antwort3

sort -c erzeugt nie eine Ausgabe. Es prüft nur die Datei. Ohne Ausgabe gibt es keinen Grund, sie in eine Datei zu schreiben. Daher inkompatibel mit -o.

Sie könnten -c als eine Art Prüfung einer Datei vor dem Sortieren verwenden, aber ich bin nicht sicher, ob das die Dinge tatsächlich so beschleunigen würde, wie Sie möchten.

Antwort4

Es besteht ein großer Unterschied zwischen der Prüfung, ob eine Datei sortiert ist, und dem Sortieren der Datei.

Bei der Prüfung reichen im besten Fall zwei Einträge (geht recht schnell), beim ersten Eintrag der nicht sortiert ist kann das Kommando beendet werden und die Prüfung ist zwar erledigt, die Ausgabe wäre an dieser Stelle aber unvollständig, der schlimmste Fall ist wenn die Datei sortiert ist (nur dann hätte die Ausgabe einen Sinn ergeben).

Wenn Sie viele Dateien zu sortieren haben und häufig Unterbrechungen vornehmen müssen, sollten Sie wahrscheinlich auf irgendeine Weise den Überblick über die fertigen Dateien behalten, bevor Sie sie erneut sortieren.

verwandte Informationen