Eine tabstoppgetrennte Datei sortieren
Ich habe die Daten mit dem folgenden format:
foo<tab>1.00<space>1.33<space>2.00<tab>3
Nun habe ich versucht zu Sortieren, die Datei basierend auf dem letzten Feld immer weniger.
Ich habe versucht, die folgenden Befehle ein, aber es war nicht so sortiert, wie wir es erwartet haben.
$ sort -k3nr file.txt # apparently this sort by space as delimiter
$ sort -t"\t" -k3nr file.txt
sort: multi-character tab `\\t'
$ sort -t "`/bin/echo '\t'`" -k3,3nr file.txt
sort: multi-character tab `\\t'
Was ist der richtige Weg, es zu tun?
Hier ist die Beispieldaten.
InformationsquelleAutor der Frage neversaint | 2009-06-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit bashdies wird den trick tun:
Beachten Sie die dollar-Zeichen vor dem single-quoted string. Sie können darüber Lesen
in der ANSI-C zu Zitieren Abschnitte der bash man-page.
InformationsquelleAutor der Antwort Lars Haugseth
Standardmäßig ist das Feld-Trennzeichen ist nicht-leer, leer, übergang, so Reiter sollte gut funktionieren.
Jedoch, die Spalten indiziert sind Basis 1 und Basis 0, so möchten Sie wahrscheinlich
Sortieren file.txt von Spalte 4 numerisch in umgekehrter Reihenfolge. (Obwohl die Daten in der Frage hat auch mit 5 Feldern, so dass der Letzte Bereich wäre, index 5.)
InformationsquelleAutor der Antwort laalto
Die Sie benötigen, um ein den tatsächlichen tab-Zeichen nach der-t\, und das in einer shell mit Strg-v und dann die tab-Zeichen. Die meisten Schalen, die ich verwendet habe, unterstützen diese Art der wörtlichen Registerkarte Eintrag.
Vorsicht, obwohl, weil das kopieren und einfügen von einem anderen Ort in der Regel nicht beibehalten tabs.
InformationsquelleAutor der Antwort Brian Carlsen
$ - Lösung funktionierte nicht für mich.
Jedoch, tatsächlich setzen Sie die tab-Zeichen selbst in den Befehl hat:
sort-t" -k2
InformationsquelleAutor der Antwort Lloyd
Rohr es durch so etwas wie
awk '{ print print $1"\t"$2"\t"$3"\t"$4"\t"$5 }'
. Dies wird sich ändern, das Leerzeichen zu tabs.InformationsquelleAutor der Antwort Michiel Buddingh
Im Allgemeinen halten Sie Daten wie diese, ist keine große Sache zu tun, wenn Sie es vermeiden können, weil die Menschen immer verwirrend, Tabulatoren und Leerzeichen.
Lösung Ihres Problems ist sehr einfach in einer Skriptsprache wie Perl, Python oder Ruby. Hier einige Beispiel-code:
InformationsquelleAutor der Antwort James Thompson
Ich wollte eine Lösung für Gnu sort auf Windows, aber keine der oben genannten Lösungen bei mir funktioniert auf der Kommandozeile.
Verwendung von Lloyd ' s Ahnung, die folgende batch-Datei (.bat) für mich gearbeitet.
Geben Sie das tab-Zeichen innerhalb der Anführungszeichen.
InformationsquelleAutor der Antwort Lawrence Noronha
Ich hatte dieses problem mit dem Sortieren in cygwin in einer bash-shell bei der Verwendung von 'general-numeric-sort". Wenn ich angegeben
-t$'\t' -kFg
wobei F die Feldnummer, es hat nicht funktioniert, aber wenn ich angegeben beide-t$'\t'
und-kF,Fg
(e.g-k7,7g
für das 7. Feld), es hat funktioniert.-kF,Fg
ohne die-t$'\t'
hat nicht funktioniert.InformationsquelleAutor der Antwort Danny
Wenn Sie wollen, um es einfacher für sich selbst, indem Sie nur mit tabs, ersetzen Sie die Leerzeichen mit tabs:
InformationsquelleAutor der Antwort The Unfun Cat