Как использовать команду Linux Sort для сортировки текстового файла по 4-му столбцу в числовом порядке? - PullRequest
23 голосов
/ 26 января 2012

У меня есть такой файл (разделенный пробелами):

AX-18 Chr1_419085 1 41908545 T C -1 98 0.51
AX-19 Chr1_419087 1 41908740 T C 0 15 0.067
AX-20 Chr1_419087 1 41908741 T C 0 13 0.067

и я хочу использовать команду sort для сортировки файла по 4-му столбцу. Я искал это везде в интернете, и я нашел различные решения, которые монахиня работает! Я даже нахожу подобный вопрос в stackoverflow, ответ на который у меня не сработал! так что это команды, которые я использую и которые не работают!

sort -n -k 4,1 out1.txt
sort -n -k 4 out1.txt
sort -n -k4 out1.txt
sort -nk4 out1.txt
sort +4 out1.txt

поэтому после выполнения всех этих команд я получаю вывод (идентичный моему вводу):

AX-18 Chr1_419085 1 41908545 T C -1 98 0.51
AX-19 Chr1_419087 1 41908740 T C 0 15 0.067
AX-20 Chr1_419087 1 41908741 T C 0 13 0.067

Я хочу получить вывод, подобный этому:

AX-19 Chr1_419087 1 41908741 T C 0 15 0.067
AX-20 Chr1_419087 1 41908740 T C 0 13 0.067
AX-18 Chr1_419085 1 41908545 T C -1 98 0.51

Ответы [ 4 ]

38 голосов
/ 26 января 2012
sort -nk4 file

-n for numerical sort
-k for providing key

или добавить -r option для обратной сортировки

sort -nrk4 file
8 голосов
/ 26 января 2012

sort не сортирует файл на месте. Вместо этого выводится отсортированная копия.

Вам нужно sort -n -k 4 out.txt > sorted-out.txt.

Редактировать: Чтобы получить требуемый заказ, вам нужно отсортировать файл с номерами , прочитанными в обратном порядке . Это делает это:

cut -d' ' -f4 out.txt | rev | paste - out.txt | sort -k1 -n | cut -f2- > sorted-out.txt

1 голос
/ 26 января 2012

должно быть

sort -k 4n out1.txt

Только что проверил это с помощью сортировки GNU (--debug включен):

$ tac input | /bin/sort --debug -k 4n
/bin/sort: using simple byte comparison
/bin/sort: key 1 is numeric and spans multiple fields
AX-18 Chr1_419085 1 41908545 T C -1 98 0.51
                    ________
___________________________________________
AX-19 Chr1_419087 1 41908740 T C 0 15 0.067
                    ________
___________________________________________
AX-20 Chr1_419087 1 41908741 T C 0 13 0.067
                    ________
___________________________________________
0 голосов
/ 19 августа 2016

Полезно отметить, что если слова в каждой строке файла разделены разделителем, кроме «пробела», то мы можем указать разделитель с помощью опции «-t»:

sort -n -t',' -k4 file -o outfile

Мы можем получитьотсортированный вывод в любом указанном выходном файле (с использованием опции «-o») вместо отображения вывода на стандартном выводе.

source: http://www.thegeekstuff.com/2013/04/sort-files/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...