2009-01-09 9 views
7

Ich habe eine große Tab-getrennte Datei, die ich in der zweiten Spalte sortieren möchte. Ich muss das Tab-Zeichen als Feldtrennzeichen in cygwin sort verwenden. Also brauche ich etwas wie folgt:Wie sortiere ich eine durch Tabs getrennte Datei in der n-ten Spalte mit cygwin sort?

sort -t \t -k 2,2 in.txt > out.txt 

Aber die Eingabeaufforderung wertet '\ t' wörtlich und nicht als das Tab-Zeichen. Beachten Sie, dass ich dies auf einem Windows-Computer mit Cygwin ausführen muss. Variationen wie

sort -t "\t" 
sort -t \"\t\" 

nicht funktionieren, weder tun dies mit einer tatsächlichen Registerkarte anstelle des \ t oben in einer cmd-Datei setzen.

Bearbeiten: Eine Lösung mit der DOS-Shell oder der Cygwin Bash-Shell ist in Ordnung.

+0

Sind Sie der DOS-Shell oder die Cygwin-Shell (Bash standardmäßig)? – PEZ

Antwort

13

Auf meinem Rechner (Mac Bash-Eingabeaufforderung GNU Art ...) dies funktioniert:

sort -t ' ' -k 2,2 in.txt > out.txt 

(. Eine "echte" Tab zwischen den Anführungszeichen)

die Registerkarte Um dorthin zu gelangen ich tippe STRG-V, TAB (STRG-V gefolgt von TAB).

EDIT: Ich habe es jetzt auf einer Windows-Maschine von der cygwin Prompt getestet und es funktioniert das gleiche (wie ich es erwartet hatte, Bash ist Bash).

10

Sie müssen ein $ -Zeichen vor dem \ t einfügen, um die String-Interpolation einzuschalten, so dass die Registerkarte tatsächlich zum Sortieren gesendet wird. Dies sollte in jedem Terminal arbeiten:

sort -t $'\t' -k 2,2 in.txt > out.txt 
+0

Dies funktioniert nicht an der Windows-Eingabeaufforderung.Der Fehler, den ich bekomme, ist: "Sortieren: Multi-Zeichen-Registerkarte' $ \\ t '" – Nikhil

+4

Ich schließe die Windows-Eingabeaufforderung in" kein Terminal "=) –

1

In Windows-Eingabeaufforderung, die einfachste Lösung, die ich gefunden ist zunächst mit Tab-Vervollständigung zu deaktivieren:

cmd /f:off 

Dann können Sie eine wörtliche Tabulatorzeichen eingeben.

0

Ich wollte eine Lösung für GnuWin32 Sortierung unter Windows, aber keine der oben genannten Lösungen funktionierte für mich auf der Kommandozeile. Aber die folgende Batch-Datei (.bat) hat funktioniert, was ich sowieso wollte. Geben Sie das Tabulatorzeichen in die Anführungszeichen ein.

C:> cat foo.bat

Art -k3 -t“" tabfile.txt

0

Wer die Ironie hier sehen?
Sie haben durch Reifen zu springen, um die Tab-Zeichen zu erhalten, ein Register zu sein ...

Auf Windows-Eingabeaufforderung war ich in der Lage, es zu tun mit:
c: \ ist \ sort -t "(Ist-tab) "aber erst nach dem starten der cmd/f: off (wie oben angedeutet)

Auf Windows bat Datei konnte ich das gleiche tun, solange Texteditor (notepad2 :-) war so eingestellt, Tabs als Tabs, nicht einfügen Räume.

Es gibt einige gut gefallen Hinweise ein -t $ '\ t“zu verwenden, aber ich versuchte, über 2^16 Kombinationen dieser ohne Glück oder restlichen Haare.

Verwandte Themen