2013-07-02 4 views
19

Ich versuche, diese Datei basierend auf der vierten Spalte zu sortieren. Ich möchte, dass die Datei basierend auf den Werten der vierten Spalte neu geordnet wird.Sortiere eine tabulatorgetrennte Datei basierend auf dem Befehl column sort bash

Datei:

2 1:103496792:A 0 103496792 
3 1:103544434:A 0 103544434 
4 1:103548497:A 0 103548497 
1 1:10363487:T 0 10363487 

Ich möchte es so sortiert:

1 1:10363487:T 0 10363487 
2 1:103496792:A 0 103496792 
3 1:103544434:A 0 103544434 
4 1:103548497:A 0 103548497 

ich diesen Befehl versucht:

sort -t$'\t' -k1,1 -k2,2 -k3,3 -k 4,4 <filename> 

Aber ich illegal Variablennamen Fehler. Kann mir jemand dabei helfen?

Antwort

44

Um nach der vierten Spalte zu sortieren, verwenden Sie nur den Selektor.

sort -t $'\t' -k 4,4 <filename> 

Sie könnten auch wollen -V, die Zahlen natürlicher sortiert. Zum Beispiel ergibt sich 1 2 10 statt 1 10 2 (lexikographische Reihenfolge).

sort -t $'\t' -k 4,4 -V <filename> 

Wenn Sie Fehler über die $'\t' bekommen dann die Shell bash stellen Sie sicher ist. Vielleicht fehlt Ihnen #!/bin/bash oben in Ihrem Skript?

+0

gleichen Fehler obwohl .. illegal Variablennamen. Ich weiß nicht, wie ich es lösen soll. Ich weiß, das Problem ist mit der $ – Vignesh

+1

Stellen Sie sicher, Sie verwenden bash und nicht '#!/Bin/sh' oder' sh script' –

+2

Auch die '-t' Option wäre hier optional, da die Standard-Spaltentrennzeichen von "Alle Leerzeichen" würden für Ihre Datei ausreichen. – chepner

3

Ich glaube, Sie haben eine fehlerhafte $ in Ihrem Befehl.

Versuchen:

sort -t\t -nk4 
+2

'$ '..'' ist eine Bash-Syntax zum Erweitern von Escape-Sequenzen. In diesem Fall wird es zu einer wörtlichen Registerkarte erweitert. –

+0

das half, aber kann es nicht bestellen als 1 2 10 als 1 10 2 22 ?? – Vignesh

+1

Das ist, was das '-n' Flag tun sollte (numerische Sortierung). – Phylogenesis

Verwandte Themen