Intereting Posts
Как отправить вложение электронной почты с помощью mailx -a с другим именем вложения? Перенаправление stdout и stderr определенных строк Являются ли потоки ядра Linux действительно ядрами? как установить внутренние переменные в mailx в linux? Windows Recovery от Grub перепутала мой компьютер? Найти совпадения из индексного файла без точного соответствия и распечатать последнее поле Будет ли изображение 3.16.0-4-amd64 нарушать мою систему из-за ошибки BUILD_EXCLUSIVE? Это правильный способ проверить, имеет ли символическая ссылка / proc / directory Каковы обычные разрешения файлов для каждого типа файлов до применения umask Разрешения базы данных umask на USB-накопителе Как скачать полную патч-серию из лоскутного одеяла? Как установить CUDA Toolkit 7/8/9 на Debian 8 (Jessie) или 9 (Stretch)? почему nmap показывает одни и те же порты иногда как фильтрованные, а иногда и закрытые? Как запустить Firefox и Thunderbird с другим стилем GTK? Скрипт с затвором

Как подключить сортировку к 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 

Оптимизированное одноканальное решение 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 выведет все поля, разделенные пробелами, с второй стороны.