2013-07-02 1 views
19

Я пытаюсь отсортировать этот файл на основе четвертого столбца. Я хочу, чтобы файл был переупорядочен на основе значений четвертого столбца.Сортировка файла с разделителями табуляции на основе команды сортировки столбцов bash

Файл:

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

Я хочу, чтобы он сортируется как это:

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

Я попробовал эту команду:

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

Но я получаю нелегальную переменную ошибку имя. Может ли кто-нибудь помочь мне с этим?

ответ

44

Для сортировки по четвертой колонке используйте только переключатель -k 4,4.

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

Возможно, вам также понадобится -V, который сортирует номера более естественно. Например, уступая 1 2 10, а не 1 10 2 (лексикографический порядок).

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

Если вы получаете ошибки о $'\t' то убедитесь, что вы используете оболочку Баш. Возможно, вам не хватает #!/bin/bash в верхней части вашего скрипта?

+0

та же ошибка, хотя .. нелегальный имя переменной. Я не знаю, как это решить. Я знаю, проблема связана с $ – Vignesh

+1

Убедитесь, что вы используете bash, а не '#!/Bin/sh' или' sh script' –

+2

Кроме того, здесь опция '-t' будет необязательной, поскольку разделитель столбцов по умолчанию «любой пробел» будет достаточным для вашего файла. – chepner

3

Я считаю, что у вас есть странствующий $ в вашей команде.

Try:

sort -t\t -nk4 
+2

'$ '..' '- это синтаксис bash для расширения управляющих последовательностей. В этом случае он расширяется до литеральной вкладки. –

+0

, который помог, но не смог его заказать как 1 2 10, чем 1 10 2 22 ?? – Vignesh

+1

Вот что должен делать флаг '-n' (числовая сортировка). – Phylogenesis