Проблемы с сортировкой в ​​Linux

Я сортирую файлы с именами генов и их значениями выражения. Все файлы имеют одинаковое точное количество строк, однако после сортировки существует разница в позиционировании определенных генов. Это очень странно. Ниже приведены отсортированные версии двух таких файлов.

например:

Cxx1c 25.1695 Cxxc1 15.2228 Cxxc4 0.952061 Cxxc5 3.13309 **Cyb5 157.426** Cyb561 0.425933 Cyb561a3 9.55082 Cyb561d1 4.00422 Cyb561d2 3.04411 Cyb5b 16.7622 Cyb5d1 7.25191 Cyb5d2 2.85109 Cyb5r1 15.2511 Cyb5r2 0.48748 

В другом файле есть сортировка. В принципе, в этом файле Cyb5 присутствует после гена Cyb561d2. Как я могу иметь точно такой же порядок сортировки. Есть ли какой-либо параметр, чтобы делать такую ​​вещь?

 Cxx1c 44.9795 Cxxc1 19.0346 Cxxc4 1.17429 Cxxc5 2.71589 **Cyb561 7.11003** Cyb561a3 1.97601 Cyb561d1 2.13004 Cyb561d2 2.03376 Cyb5 64.074 Cyb5b 14.5329 Cyb5d1 12.0212 Cyb5d2 1.47763 Cyb5r1 10.5463 Cyb5r2 0 

Вот мой код, который генерирует выше отсортированный файл:

 for i in *.txt; do sort -d $i >$i.sort done 

  • Как отсортировать несколько столбцов со столбцом, включая дату?
  • В Linux верхняя команда сортирует по полю «TIME +» с помощью командной строки, итерации 1 раз
  • 2 Solutions collect form web for “Проблемы с сортировкой в ​​Linux”

    Вы в настоящее время сортируете по всей строке, но похоже, что вы хотите сортировать только в первом столбце. Так как ваша команда в настоящее время написана, столбцы будут в основном объединены вместе, например:

     Cyb5 157.426 -> Cyb5157426 Cyb561 0.425933 -> Cyb5610425933 

    против

     Cyb561 7.11003 -> Cyb561711003 Cyb5 64.074 -> Cyb564074 

    Чтобы отсортировать только первый столбец, вам понадобится следующая команда:

     sort -d -k1,1 

    Cyb5 157.426 сортирует до Cyb561 0.425933 то время как Cyb5 64.074 сортируется после Cyb561 7.11003 потому что в вашей локали пробелы игнорируются в первом порядке прохождения, поэтому порядок ближе к порядку английского словаря.

    Например, в словаре вы будете иметь a priori между apiary и Arrival .

    Здесь сравнение Cyb5 157.426 с Cyb561 0.425933 сравнивает первый Cyb5157.426 с Cyb5610.425933 в первом проходе, потому что первый вес Cyb5157.426 Cyb5610.425933IGNORE .

    Если вы хотите избежать этой специальной обработки, вы можете изменить языковой стандарт на C где заказ основан только на значениях кодовой точки символов.

     LC_ALL=C sort -d file 

    Или, как сказал @Swiss, только сортировка по первому полю:

     sort -d -k1,1 file 

    Однако обратите внимание, что полевым разделителем является переход от незаполненного к пробелу, а пробелы включены в поля.

    Так:

      bx ax 

    с sort -d -k1,1 все равно будут отсортированы как

     ax bx 

    в вашем языке, потому что пробелы игнорируются, но как:

      bx ax 

    В языке C, поскольку символ пробела сортируется перед a .

    Вы можете добавить параметр -b чтобы ведущие пробелы всегда игнорировались независимо от языка. Или еще раз, исправим локаль на C, если вы хотите, чтобы строки, начинающиеся с пробелов, были отсортированы первыми.

    Linux и Unix - лучшая ОС в мире.