Сортировка по полю имени?

Ответы, которые Вы нашли на Exchange Стека, являются правильными, и это учебное руководство является неправильным. Можно экспериментировать собой или искать его в стандарте. Сброс IFS эквивалентно установке его к значению по умолчанию новой строки вкладки пространства, в то время как пустое IFS эффективно выключает полевое разделение.

Можно консультироваться со страницей Sven Mascheck по поводу IFS об исторических реализациях. Нескольким историческим оболочкам не нравилось unset IFS, и очень старая версия ksh рассматривала его как пустое IFS но все современные оболочки и самые старые оболочки рассматривают сброс IFS как значение по умолчанию.

Вы не должны запускать свой сценарий с IFS= если Вы не хотите выключить полевое разделение (который может быть разумным решением — но отметить, что все еще необходимо поместить двойные кавычки вокруг замен для предотвращения globbing, если Вы не выключаете это с set -f также). Для сброса значения по умолчанию использовать unset IFS. Это спорно, полезно ли это в начале сценария; существует много других плохих вещей такой как изворотливое PATH то, что вызывающая сторона может сделать, чтобы заставить Ваш сценарий пойти не так, как надо.

Это учебное руководство также советует для сброса PATH. Это - обычно плохой совет. В большинстве случаев Вы не можете предсказать, каков корректный путь поиска, но пользователь знает. Как Вы знаете ли /usr/local/bin или /home/bob/bin содержит исправленные версии ошибки утилит на древнем Unix где те в /usr/bin багги? Вы действительно хотите встроить всю логику, чтобы выяснить, поместить ли /usr/xpg6/bin перед /bin? В том, какое положение Вы хотите /usr/gnu/bin? Не сбрасывайте ПУТЬ, если Ваш сценарий не предназначается для определенной системы.

Я не прочитал это учебное руководство, но я действительно проверял одну вещь: это не говорит Вам с самого начала всегда помещать двойные кавычки вокруг замен команды и подстановок переменных. Таким образом, я не думаю, что это учебное руководство является хорошим.

3
16.09.2014, 20:11
2 ответа

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

sort -k11 <(awk '$1 ~ /ATOM/' file)

Объяснение:

  • sort -k11 : сортировать по 11-му полю
  • awk '$ 1 ~ / ATOM /' file : печатает только поля, начинающиеся с ATOM
  • Часть awk является входом в часть sort
2
27.01.2020, 21:23

Каким должен быть конечный результат? Должны ли все строки с первым полем ATOM отображаться вверху файла, в конце файла?

Если можно, чтобы ATOM где-нибудь в списке, то можно отсортировать их в другом файле и добавить в начало или конец исходного файла или в определенный столбец. Я уверен, что кто-то другой опубликует более простое решение - пока только мои два цента ..

grep -v ^ATOM file > result; sort -k11 < grep ^ATOM file >> result
1
27.01.2020, 21:23

Теги

Похожие вопросы