Bash сортировать строки с разделителями табуляции на основе конкретного столбца с большинством значений, разделенных запятой - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть такие строки:

rs6605071   chr1:962943 XM_017002478.2  stuff1,stuff2                           morestuff
rs6605071   chr1:962943 XM_017002479.1  stuff1,stuff2,stuff3,stuff4,stuff5      morestuff
rs6605071   chr1:962943 XR_001737138.1  stuff1,stuff2,stuff3                    morestuff
rs6605071   chr1:962943 XR_001737478.1  stuff1,stuff2,stuff3,stuff4             morestuff
rs6605071   chr1:962943 NC_426604.3     stuff1                                  morestuff
rs6605071   chr1:962943 NC_426605.3     stuff1                                  morestuff

Я бы хотел отсортировать строки по 4-му столбцу для получения желаемого результата:

rs6605071   chr1:962943 XM_017002479.1  stuff1,stuff2,stuff3,stuff4,stuff5      morestuff
rs6605071   chr1:962943 XR_001737478.1  stuff1,stuff2,stuff3,stuff4             morestuff
rs6605071   chr1:962943 XM_017002478.2  stuff1,stuff2                           morestuff
rs6605071   chr1:962943 NC_426604.3     stuff1                                  morestuff
rs6605071   chr1:962943 NC_426605.3     stuff1                                  morestuff

Каков наилучший подход для достижениятакой результат в bash?

Edit 1 : столбец 4 не должен сортироваться по алфавиту.Он должен быть отсортирован по количеству найденных значений (разделенных запятыми).

Заранее спасибо

1 Ответ

0 голосов
/ 11 февраля 2019

Так что это немного глупо, но это работает.Я не могу сказать ваш разделитель (если это табуляция или пробелы), но что-то вроде этого будет работать, и позволяет довольно легко манипулировать:

 cat asdfasdf.txt | awk '{print gsub(/,/,","),$1,$2,$3,$4,$5}' | sort -r | cut -d' ' -f2,3,4,5,6

Теперь, есть способ сделать этополностью в awk, и я всегда в восторге от awk экспертов, которые так хорошо это знают.

Я надеюсь, что один из них соберет более элегантную команду, но пока это поможетв крайнем случае.

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