У меня есть пара команд в сценарии awk, который я пишу:
print "Here are some players and their numbers, sorted by last name"
if(sum[x] > 500) {print x, $2}
Какие выводы:
Here are some players and their numbers, sorted by last name
Lebron James 23
Kevin Durant 35
Kobe Bryant 24
Blake Griffin 32
Dikembe Mutumbo 55
Как я могу использовать sort
команду в своем скрипте awk для сортировки ТОЛЬКО игроков и их чисел?
command-line
text-processing
awk
KM142646
источник
источник
x
, затем установитьPROCINFO["sorted_in"]
загадочное значение, затем выведите массив. Я бы не пошел туда.... | sort -k2,2
....| sort -k2,2
если есть другие строки, которые должны быть напечатаны? Проверьте отредактированный вопрос.echo
строку заголовка оболочки, затем запуститеawk | sort
конвейер.Ответы:
Вы можете добавить
| sort -k2
к своей команде. Это будет сортировать в алфавитном порядке на основе второго столбца.Пример:
результаты в
источник
{print x, $2}
непосредственно в коде скрипта? Я получаю сообщение об ошибке при конвейереif(sum[x] > 500) {print x, $2} | sort -k2
.if(sum[x] > 500) {print x, $2}
код Awk, а| sort -k2
команда оболочки. Очевидно, что вы не можете смешивать эти два, потому что это разные языки. Вместо этого вам нужно применитьsort
команду к выводу интерпретатора Awk, который выполняет ваш фрагмент кода Awk. Если вы не знаете, что я имею в виду, пожалуйста, расширьте свой вопрос, чтобы дать нам полную картину../my-script.sh | sort -k2
. 2. добавить `| Сортируйте -k2` в строке вашего скрипта, которая выдает результат, указанный в вашем вопросе.Хотя я бы не рекомендовал это (учитывая относительную простоту передачи результата через внешнюю
sort
команду), вы можете сделать это по крайней мере с последними версиями GNU awk (по крайней мере, 4.0 IIRC), как описано в Сортировке значений и индексов массива с gawkВот как вы могли бы реализовать это, предполагая, что у вас есть данные в ассоциативном массиве, в котором находится индекс
Firstname Lastname
. Сначала вам нужно определить пользовательскую функцию сравнения, которая разделяет индекс, сравнивает сначала сLastname
последующим (в качестве прерывателя связей),Firstname
например,Теперь вы можете использовать
PROCINFO["sorted_in"]
метод сортировки массива, упомянутый в комментариях @zwetsПоложить его вместе
Тестирование:
В более ранних или более старых версиях awk лучше всего хранить индексированные данные
Lastname Firstname
вместо этого, сортировать с обычнымиasorti
, а затем разбивать и менять поля индексов при прохождении массива для его печати:источник
Чтобы
sort
только через пробел отделить второе поле, используйте ключ-k2,2
:по умолчанию
sort
сортировка выполняется лексикографически.Обратите внимание, что если вы не упомянете последнее поле для ключа сортировки, т.е. если вы просто используете его,
-k2
вы можете не получить желаемый результат, как это будетsort
по всем полям, начиная со второго.Также проверьте
man sort
.источник
Пытаться
Где myscript.awk содержит чисто команды awk.
Если ваш настоящий сценарий является сценарием оболочки, у вас есть несколько вариантов, включая
./myscript.bash | sort -k2
Переписать код как функцию внутри скрипта
вместо
Делать
Но обратите внимание, что вы можете также применить сортировку к структуре do ... done вместо создания функции.
источник
Чтобы отсортировать данные для печати:
Предположим, что вы хотите напечатать 2-е поле (через пробел), используйте это:
например:
Если вы хотите распечатать все свои,
data.txt
но отсортированные по столбцу 2, то:Используйте эту логику в ваших требованиях.
Вы можете использовать
man sort
для более интересных функцийsort
.источник
как насчет ниже:
это работает, когда я проверил.
источник
Чтобы отсортировать вывод в файл:
источник