Сортировка строк по количеству слов в строке

На основе быстрого поиска Google похоже, что wubi никогда не работал на установку Окончательного Linux.

14
24.08.2015, 06:08
4 ответа

Вы можете сделать что-то вроде:

awk '{print NF,$0}' file | sort -nr | cut -d' ' -f 2-

Мы используем awk , чтобы указать количество полей в каждой строке. Затем мы сортируем по этому номеру и удаляем его с помощью cut .

22
27.01.2020, 19:50

В недавнем GNU awk можно использовать массив PROCINFO для определения многих внутренних параметров включая порядок, в котором печатаются элементы массива (контролируется элементом "sorted_in" ). Таким образом, мы можем построить и индексировать массив со значением NF "" NR , элементы которого имеют значение $ 0 , и распечатать его в желаемом виде, в вашем случае это будет "@ind_num_desc" :

awk '{a[NF" "NR]=$0}END{PROCINFO["sorted_in"]="@ind_num_desc"; for(i in a) print a[i]}' file
6
27.01.2020, 19:50

Perl однострочник:

print sort { split(' ',$a) <=> split(' ',$b) } <>;

Если вы хотите разорвать связи в алфавитном порядке:

print sort { split(' ',$a) <=> split(' ',$b) or $a cmp $b } <>;
5
27.01.2020, 19:50

Через питон.

s = '''hello: world foo bar baz
bar:
baz: bin boop bop fiz bang beep
bap: bim bam bop'''.splitlines()
for i in sorted(s, key=lambda x: len(x.split()), reverse=True):
    print(i)

or

with open('/path/to/the/input/file') as f:
    m = f.readlines()
    for i in sorted(m, key=lambda x: len(x.split()), reverse=True):
        print(i, end="")
4
27.01.2020, 19:50

Теги

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