Bash сортировка по позиции символа в столбце - PullRequest
0 голосов
/ 20 января 2020

Я хотел бы отсортировать указанный ниже файл по 2-му столбцу, с 7-й позиции на 9-ю.

$ cat sample.bed
chr1    248956422       chr1:248956422
chr2    242193529       chr2:242193529
chr3    198295559       chr3:198295559
chr4    190214555       chr4:190214555
chr5    181538259       chr5:181538259
chr6    170805979       chr6:170805979
chr7    159345973       chr7:159345973
chrX    156040895       chrX:156040895
chr8    145138636       chr8:145138636
chr9    138394717       chr9:138394717

Я использую сортировку, как показано, и получаю следующий вывод:

$ sort -n -k2.7,2.9 sample.bed
chr4    190214555       chr4:190214555
chr6    170805979       chr6:170805979
chr5    181538259       chr5:181538259
chr2    242193529       chr2:242193529
chr8    145138636       chr8:145138636
chrX    156040895       chrX:156040895
chr3    198295559       chr3:198295559
chr9    138394717       chr9:138394717
chr1    248956422       chr1:248956422
chr7    159345973       chr7:159345973

Сортировка изменяет порядок строк, но не на основе моих параметров. Обратите внимание, что sort -k2,2 работает, как и ожидалось:

$ sort -k2,2 sample.bed
chr9    138394717       chr9:138394717
chr8    145138636       chr8:145138636
chrX    156040895       chrX:156040895
chr7    159345973       chr7:159345973
chr6    170805979       chr6:170805979
chr5    181538259       chr5:181538259
chr4    190214555       chr4:190214555
chr3    198295559       chr3:198295559
chr2    242193529       chr2:242193529
chr1    248956422       chr1:248956422

Я, должно быть, упускаю что-то очевидное ... Любая помощь будет принята с благодарностью.

1 Ответ

2 голосов
/ 21 января 2020

Вывод sort --debug очень информативен:

# sort -n -k2.7,2.9 --debug
...
chr4    190214555       chr4:190214555
          ___
______________________________________
...

Он сравнивает 021 с первой строки chr4, поскольку считает начальные пробелы принадлежащими полю. Вы можете:

sort -n -k2.11,2.13

или игнорировать начальные пробелы с помощью -b:

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