Учитывая вход:
hello: world foo bar baz
bar:
baz: bin boop bop fiz bang beep
bap: bim bam bop
boatkeeper: poughkeepsie
Я хотел бы отсортировать его по большинству слов вверху, по крайней мере в конце, например:
baz: bin boop bop fiz bang beep
hello: world foo bar baz
bap: bim bam bop
boatkeeper: poughkeepsie
bar:
Как бы я сделал это с sort
или другим инструментом?
text-processing
sort
Калеб Сюй
источник
источник
bin: bop boop
раньшеboatkeeper: poughkeepsie
. Если две строки имеют одинаковое количество слов, я бы предпочел, чтобы связи были в алфавитном порядке, но это не является обязательным требованием.Ответы:
Вы могли бы сделать что-то вроде:
Мы используем
awk
для префикса количество полей в каждой строке. Затем мыsort
по этому номеру и удалить его сcut
.источник
В недавнем GNU
awk
можно использоватьPROCINFO
массив для определения многих внутренних параметров, включая порядок, в котором печатаются элементы массива (управляется элементом"sorted_in"
). Таким образом, мы можем построить и проиндексировать массив со значениемNF" "NR
, для которого элементы имеют значение,$0
и вывести его в желаемом выводе, в вашем случае это будет"@ind_num_desc"
:источник
NF" "$0" "NR
, у вас был бы толькоNR
механизм резервирования / обработки дубликатов.cmp_func()
- gnu awk позволяет это.Perl однострочный:
Если вы хотите разорвать связи в алфавитном порядке:
источник
Через питона.
или
источник