The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Сценарий для сортировки строк"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"Сценарий для сортировки строк"  +/
Сообщение от Gridal (ok), 23-Июн-20, 20:15 
Добрый день! Помогите новичку в BASH. Есть несколько строк с разным количеством символов (aa,bbbb, ccc, 111 и т.д.). Их надо отсортировать так, чтобы вначале шли строки с наибольшим кол-ом символов, а строки с одинаковым кол-ом символов шли в алфавитном порядке.
Я знаю команды для подсчета кол-ва символов в строке (expr length) и могу их сравнивать между собой. Если бы строк было две - все было бы просто. А с большим кол-ом строк мне никак не придумать как их отсортировать.
Заранее спасибо!
Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по времени | RSS]


1. "Сценарий для сортировки строк"  +/
Сообщение от ACCA (ok), 23-Июн-20, 21:28 
В потоке прицепи длину строки чем-нибудь вроде awk или perl. Потом скуси её оттуда:

perl -e 'printf "%06i\t%s",length($_),$_ while (<>);' yourfile.txt | sort | cut -f 2-

Ответить | Правка | Наверх | Cообщить модератору

2. "Сценарий для сортировки строк"  +/
Сообщение от nekto (?), 24-Июн-20, 01:57 
ондострочник на перле вспомнился

Ответить | Правка | Наверх | Cообщить модератору

3. "Сценарий для сортировки строк"  +/
Сообщение от ACCA (ok), 24-Июн-20, 08:07 
Это для джедаев. Падаванам нужно чуть попроще, чтобы прониклись силой.

Ответить | Правка | Наверх | Cообщить модератору

4. "Сценарий для сортировки строк"  +/
Сообщение от Gridal (ok), 24-Июн-20, 14:21 
> Это для джедаев. Падаванам нужно чуть попроще, чтобы прониклись силой.

Спасибо большое за помощь! Но видимо, я даже на падавана пока не гожусь. ))

Я написал такой скриптик (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
В принципе, все работает как надо, но вот как это все теперь упростить ))

Ответить | Правка | Наверх | Cообщить модератору

5. "Сценарий для сортировки строк"  +/
Сообщение от universite (ok), 24-Июн-20, 15:09 
>[оверквотинг удален]
> гожусь. ))
> Я написал такой скриптик (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
> В принципе, все работает как надо, но вот как это все теперь
> упростить ))

Если символов в строке больше 6 ?

https://www.unix.com/shell-programming-and-scripting/245099-...
https://stackoverflow.com/questions/36493766/awk-sort-a-stri...

дальше гуглите сами.

Ответить | Правка | Наверх | Cообщить модератору

8. "Сценарий для сортировки строк"  +/
Сообщение от Павел Отредиезemail (?), 29-Июн-20, 20:15 
Вот для сдачи преподу

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 даёт на единицу больше длинну, но для сортировки годится.


Ответить | Правка | Наверх | Cообщить модератору

9. "Сценарий для сортировки строк"  +/
Сообщение от Павел Отредиезemail (?), 29-Июн-20, 20:16 
В начале ошибка, д.б. #!/bin/bash.
Ответить | Правка | Наверх | Cообщить модератору

10. "Сценарий для сортировки строк"  +/
Сообщение от Павел Отредиезemail (?), 29-Июн-20, 20:18 
cat sort.txt | ./sort.sh
если препод будет докапываться.
Ответить | Правка | К родителю #8 | Наверх | Cообщить модератору

11. "Сценарий для сортировки строк"  +/
Сообщение от Павел Отредиезemail (?), 29-Июн-20, 20:25 
>[оверквотинг удален]
>     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. :^)

Ответить | Правка | К родителю #8 | Наверх | Cообщить модератору

12. "Сценарий для сортировки строк"  +/
Сообщение от Павел Отредиезemail (?), 30-Июн-20, 13:44 
Недочитал задание, мой окончательный вариант:

#bin/bash
while read string
do
    len=`echo $string | wc -m`
    echo "$len    $string"
done | sort -k 1nr -k 2d | cut -f 2

Результат:

ааабббвввгггдддееежжжззз
бббвввгггддд
бббвввгггддд
ааабббввв
ааабббввв
аааббб
аааввв
ааа

Ответить | Правка | К родителю #8 | Наверх | Cообщить модератору

7. "Сценарий для сортировки строк"  +/
Сообщение от Павел Отредиезemail (?), 29-Июн-20, 20:01 
>[оверквотинг удален]
> гожусь. ))
> Я написал такой скриптик (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  берет только второй столбец.

Ответить | Правка | К родителю #4 | Наверх | Cообщить модератору

6. "Сценарий для сортировки строк"  +/
Сообщение от Pahanivo (ok), 25-Июн-20, 16:22 
> Это для джедаев. Падаванам нужно чуть попроще, чтобы прониклись силой.

Далеко не всякий джедай осилит сортировку по двум критериям в конвейере ))

Ответить | Правка | К родителю #3 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру