Как подключить сортировку к gawk?

У меня возникли проблемы с попыткой рассказать что-то вроде gawk. В настоящее время у меня есть:

gawk -f p3a01.awk unsortedNames.txt | sort | gawk -f p3a01.awk 

это, однако, дает мне неправильные результаты. Кажется, что gawk работает нормально, если я что-то вроде:

 gawk -f p3a01.awk unsortedNames.txt | sort > test1.out gawk -f p3a01.awk test1.out 

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

Snip of unsortedNames.txt :

 Faye King Lenny R Graph IM Board Grey White 

p3a01.awk ( p3a01.awk печатает фамилию, затем остальное имя):

 BEGIN{} { printf $NF " "; $NF=""; print $0; } END{} 

p3a02.awk (печатает файл в первоначальном порядке после того, как он был заказан по имени):

 BEGIN{} { for(i=2;i<=NF;i++){ printf $i " "; } print $1; } END{} 

Конечный результат (отсортированный по фамилии):

 IM Board Lenny R Graph Faye King Grey White 

2 Solutions collect form web for “Как подключить сортировку к gawk?”

Оптимизированное одноканальное решение GNU Awk :

 awk 'BEGIN{ PROCINFO["sorted_in"]="@ind_str_asc" } { a[$NF]=$0 }END{ for(i in a) print a[i] }' unsortedNames.txt 

  • PROCINFO["sorted_in"]="@ind_str_asc" – сравнение / сортировка по ключам / индексам массива. Мы можем установить предопределенный массив PROCINFO в один из множества предопределенных значений. Эти специальные значения, описанные здесь (документация): https://www.gnu.org/software/gawk/manual/gawk.html#Controlling-Scanning

Выход:

 IM Board Lenny R Graph Faye King Grey White 

Кажется, что ваш код работает как рекламируемый, поэтому любые ошибки, которые вы испытываете, могут быть связаны с невидимыми символами во входных данных ( \r в конце строк?).

Я заметил, что вы удаляете последнее поле при преобразовании данных для sort . Это необязательно. Вам просто нужно добавить каждую строку с последним полем, а затем удалить ее после sort :

 $ awk '{ print $NF, $0 }' file | sort | cut -d ' ' -f 2- IM Board Lenny R Graph Faye King Grey White 

Команда cut выведет все поля, разделенные пробелами, с второй стороны.

  • Как показать время процессора для процессов через вершину без «корневых» процессов
  • Могу ли я разархивировать и объединить отсортированные текстовые файлы за одну операцию?
  • Как файлы tar с отсортированным порядком?
  • Есть ли способ сортировать grep-вывод csv-файла?
  • Как я могу сортировать файл .txt по двум столбцам?
  • Как установить ls -lh со временем и длинным форматом даты в порядке убывания в .bashrc
  • Как работает awk?! ++?
  • Как отсортировать по 2 столбцам и сохранить верхнюю строку из каждой группы?
  • Объединить столбцы с помощью awk? (Или другие предложения)
  • В чем разница между «sort -u» и «sort | уник»?
  • Сортировка файла на основе средней части
  • Interesting Posts

    Присоединение USB-последовательного устройства с пользовательским PID к ttyUSB0 на встроенном

    Объедините несколько файлов на основе md5sum

    Постоянная история Баша между отдельными процессами

    Почему Vim только активирует мою настройку выделения после того, как я вручную извиню .vimrc?

    Лучший / хороший инструмент для мониторинга сервера с веб-интерфейсом?

    Мост / Совместное использование сетевого принтера в freebsd

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

    Блокировка обновлений ядра с помощью dpkg

    Попытка удалить эхо-код пароля в Redhat 5 при входе в систему

    ss заменяет netstat, как я могу получить его для отображения портов аналогично тому, к чему я привык?

    Почему вырезать провал с bash, а не zsh?

    Есть ли способ заставить «mv» терпеть неудачу?

    Является ли таблица файлов в файловой системе или в памяти?

    Можно ли загружать чрезвычайно большие файлы разумно или по частям через SSH от Linux до Windows?

    Сценарий проверки установленного пакета debian – обработка ошибок?

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