2013-07-02 17 views
19

Próbuję posortować ten plik na podstawie czwartej kolumny. Chcę, aby plik został zmieniony na podstawie wartości czwartej kolumny.Sortuj plik rozdzielany tabulatorami na podstawie polecenia sortowania kolumnowego bash

Plik:

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

chcę sortowane tak:

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

Próbowałem tego polecenia:

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

Ale otrzymuję błąd nazwy nielegalnego zmienny. Czy ktoś może mi w tym pomóc?

Odpowiedz

44

Aby posortować w czwartej kolumnie, użyj tylko selektora -k 4,4.

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

Możesz również chcieć -V, który sortuje liczby bardziej naturalnie. Na przykład, wydając 1 2 10 zamiast 1 10 2 (porządek leksykograficzny).

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

Jeśli otrzymujesz błędy dotyczące $'\t' następnie upewnij się, że powłoki bash. Być może brakuje Ci #!/bin/bash u góry skryptu?

+0

sam błąd .. choć nielegalne nazwa zmiennej. Nie wiem, jak to rozwiązać. Wiem, że problem jest z $ – Vignesh

+1

Upewnij się, że używasz bash, a nie '#!/Bin/sh' lub' sh script' –

+2

Opcja '-t' będzie tu opcjonalna, ponieważ domyślny separator kolumn "dowolny spacja" wystarczyłoby dla twojego pliku. – chepner

3

Uważam, że masz błędne $ w swoim poleceniu.

Spróbuj:

sort -t\t -nk4 
+2

'$ '..'' jest składnią bash do rozszerzania sekwencji unikowych. W tym przypadku rozwija się do literalnej zakładki. –

+0

, które pomogły, ale nie można go zamówić jako 1 2 10 niż 1 10 2 22 ?? – Vignesh

+1

To właśnie powinna robić flaga '-n' (sortowanie numeryczne). – Phylogenesis

Powiązane problemy