Используйте команды bash для сортировки списка по определенному столбцу - PullRequest
1 голос
/ 24 октября 2011

У меня есть список данных с четырьмя столбцами, как показано ниже:

chr1    9778939 10199603    DEL
chr1    143804138   143808614   DEL
chr1    8541961 8757598 DEL
chr1    141480516   141909199   INV
chr1    3902285 4665319 INV
chr1    10212548    10467934    DEL
chr1    225767517   226730696   INV
chr1    10807309    11011343    DEL
chr1    23663773    23957334    DEL
chr1    4468523 4665322 DEL
chr1    24458662    24704306    DEL
....
....
chr2
....
....
chr10
....
....
chr22
....
....
chrX
....
....
chrY
....
....

Я надеюсь:

  1. первая сортировка по chr1, chr2, chr3 ..... до chr22, chrX, chrY. Если просто использовать sort -n, он будет сортироваться как chr10, chr1, chr11 .... blabla. Я надеюсь отсортировать по числовому значению первого столбца.

  2. Тогда как под каждой хромосомой (chr1, chr2 ...) как сортировать по последнему столбцу, то есть "DEL" или "INV"?

  3. Затем выполните сортировку по второму столбцу, опять же, по числовому значению. Скажем, 104000 должно идти после 10500, потому что 104000> 10500, но не на основе сравнения третьей цифры (4 и 5)

Спасибо. Надеюсь, я дал понять.

Ответы [ 2 ]

2 голосов
/ 24 октября 2011

При условии, что столбцы в файле afile разделены одним space символом

$ cat afile | sed 's/chr/chr /' | sort -k2,2n -k5,5 -k3,3n | sed 's/chr /chr/'
0 голосов
/ 26 января 2013

Преобразуйте X и Y в 23 и 24 для числовой сортировки, а затем обратно после сортировки.

cat file | sed 's/chr/chr /' | sed 's/ X/ 23/' | sed 's/ Y/ 24/' | sort -k 2,2n -k 5,5n -k 3,3n | sed 's/chr 23/chrX/' | sed 's/chr 24/chrY/' | sed 's/chr /chr/'

Это длинная строка seds, но они выполняются быстро.

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