Сценарий для сортировки строк, Gridal, 23-Июн-20, 20:15 [смотреть все]Добрый день! Помогите новичку в BASH. Есть несколько строк с разным количеством символов (aa,bbbb, ccc, 111 и т.д.). Их надо отсортировать так, чтобы вначале шли строки с наибольшим кол-ом символов, а строки с одинаковым кол-ом символов шли в алфавитном порядке. Я знаю команды для подсчета кол-ва символов в строке (expr length) и могу их сравнивать между собой. Если бы строк было две - все было бы просто. А с большим кол-ом строк мне никак не придумать как их отсортировать. Заранее спасибо!
|
- Сценарий для сортировки строк, ACCA, 21:28 , 23-Июн-20 (1)
В потоке прицепи длину строки чем-нибудь вроде awk или perl. Потом скуси её оттуда:perl -e 'printf "%06i\t%s",length($_),$_ while (<>);' yourfile.txt | sort | cut -f 2-
- Сценарий для сортировки строк, nekto, 01:57 , 24-Июн-20 (2)
ондострочник на перле вспомнился
- Сценарий для сортировки строк, ACCA, 08:07 , 24-Июн-20 (3)
Это для джедаев. Падаванам нужно чуть попроще, чтобы прониклись силой.
- Сценарий для сортировки строк, Gridal, 14:21 , 24-Июн-20 (4)
> Это для джедаев. Падаванам нужно чуть попроще, чтобы прониклись силой.Спасибо большое за помощь! Но видимо, я даже на падавана пока не гожусь. )) Я написал такой скриптик (data.txt - это файл с нашими строками) awk ' length($0) == 6 ' data.txt|sort awk ' length($0) == 5 ' data.txt|sort awk ' length($0) == 4 ' data.txt|sort awk ' length($0) == 3 ' data.txt|sort awk ' length($0) == 2 ' data.txt|sort awk ' length($0) == 1 ' data.txt|sort В принципе, все работает как надо, но вот как это все теперь упростить ))
- Сценарий для сортировки строк, universite, 15:09 , 24-Июн-20 (5)
- Сценарий для сортировки строк, Павел Отредиез, 20:15 , 29-Июн-20 (8)
Вот для сдачи преподу
sort.sh: #bin/bash while read string do len=`echo $string | wc -m` echo "$len $string" done | sort -g | cut -f 2
Между $len и $string в echo табуляция. Usage:
cat sort.txt | bash sort.sh
wc -m даёт на единицу больше длинну, но для сортировки годится.
- Сценарий для сортировки строк, Павел Отредиез, 20:16 , 29-Июн-20 (9)
В начале ошибка, д.б. #!/bin/bash.
- Сценарий для сортировки строк, Павел Отредиез, 20:18 , 29-Июн-20 (10)
cat sort.txt | ./sort.sh если препод будет докапываться.
- Сценарий для сортировки строк, Павел Отредиез, 20:25 , 29-Июн-20 (11)
>[оверквотинг удален] > len=`echo $string | wc -m` > echo "$len $string" > done | sort -g | cut -f 2 > > Между $len и $string в echo табуляция. > Usage: > > cat sort.txt | bash sort.sh > > wc -m даёт на единицу больше длинну, но для сортировки годится.PS препод завалит незнайку, надо знать используемые клманды и ключи. Читай man wc, man sort, man cut. :^)
- Сценарий для сортировки строк, Павел Отредиез, 13:44 , 30-Июн-20 (12)
Недочитал задание, мой окончательный вариант:
#bin/bash while read string do len=`echo $string | wc -m` echo "$len $string" done | sort -k 1nr -k 2d | cut -f 2
Результат:
ааабббвввгггдддееежжжззз бббвввгггддд бббвввгггддд ааабббввв ааабббввв аааббб аааввв ааа
- Сценарий для сортировки строк, Павел Отредиез, 20:01 , 29-Июн-20 (7)
>[оверквотинг удален] > гожусь. )) > Я написал такой скриптик (data.txt - это файл с нашими строками) > awk ' length($0) == 6 ' data.txt|sort > awk ' length($0) == 5 ' data.txt|sort > awk ' length($0) == 4 ' data.txt|sort > awk ' length($0) == 3 ' data.txt|sort > awk ' length($0) == 2 ' data.txt|sort > awk ' length($0) == 1 ' data.txt|sort > В принципе, все работает как надо, но вот как это все теперь > упростить )) Для твоего понимания АССА добавляет в начало каждой строки количество её символов потом пробел и саму строку. Дальше передаёт это на вход команды сорт. Она хорошо сортирует сначала по цифрам в начале строки, при равенстве дальше по алфавиту. Последний cut берет только второй столбец.
- Сценарий для сортировки строк, Pahanivo, 16:22 , 25-Июн-20 (6)
> Это для джедаев. Падаванам нужно чуть попроще, чтобы прониклись силой.Далеко не всякий джедай осилит сортировку по двум критериям в конвейере ))
|