LINUX.ORG.RU

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

 ,


0

2

Здравствуйте.

Есть файл с такими строками:

 
Петров Вася
Вася
Петров Василий Николаевич

Нужно на выходе отсортировать все линии в файле по количеству слов в строке, то есть, сначала все одинарные слова, потом 2 слова в строке, потом три и т.п. Вот так:

Вася
Петров Вася
Петров Василий Николаевич

Нашел решение

awk '{printf("%05d%s\n", NF, $0)}' file.txt|sort|awk '{print substr($0, 6)}'
работает с английскими словами, но с кирилицей не хочет.

Как наши-то слова отсортировать? ))

Это скорее с файлом что-то не то:

$ echo -e 'четверное слово\nтут много много слов\nдвойное слово\nслово' | awk '{printf("%05d%s\n", NF, $0)}' |sort|awk '{print substr($0, 6)}'
слово
двойное слово
четверное слово
тут много много слов

xaizek ★★★★★
()
Ответ на: комментарий от xaizek

у меня часть команды awk '{printf(«%05d%s\n», NF, $0)}' выдает

00003ламинирование

00004ламинирование

00005ламинирование

00005ламинирование

цифры в начале

alex1306
() автор топика
Ответ на: комментарий от alex1306

отдели число от исходной строки пробелом

anonymous
()
Ответ на: комментарий от alex1306

Так последняя команда эти цифры должна убирать. Можно такой вариант попробовать:

awk '{printf("%d %s\n", NF, $0)}' | sort -h | cut -d' ' -f2-

xaizek ★★★★★
()
Ответ на: комментарий от alex1306
$ ( for i in 1 2 3; do echo ламинирование; done ) | awk '{printf("%05d%s\n", NF, $0)}'
00001ламинирование
00001ламинирование
00001ламинирование

Либо нужно чинить awk, либо в файле что-то очень странное.

В любом случае, (предполагаем utf8 повсюду)

perl -CSD -e'print map $_->[1], sort { $a->[0] <=> $b->[0] } map [ scalar(split), $_ ], <>'

AITap ★★★★★
()
Ответ на: комментарий от AITap

Malformed UTF-8 character (unexpected end of string) in split at -e line 1, <> line 113675.

такое вот сыпет. Файл создан в notepad++ utf8 unix перенос строки

alex1306
() автор топика
Ответ на: комментарий от alex1306

Это CP1251. Можно убрать -CSD, тогда требование UTF-8 пропадёт. Оно здесь не обязательно, я изначально писал другой алгоритм подсчёта слов.

AITap ★★★★★
()
Ответ на: комментарий от AITap

ага, заработало! + Еще сортировка А-Я - супер). Спасибо.

alex1306
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.