The OpenNET Project / Index page

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

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

"сортировка "  
Сообщение от Peter email(??) on 29-Ноя-06, 14:51 
Приветствую!
Есть задачка.

Необходимо отсортировать список каталогов, имя каталога имеет вид: xxyymmdd.dd и xxxyymmdd.dd, например

1. aa060212.12
2. aa060212-1.12
3. aa060212-4.12
4. ccc060512-1.12
5. ccc060611.12

Нужно чтобы  список был отсортирован с учетом минуса, т.е:

xxxx.12
xxxx-1.12
xxxx-2.12

в такой последовательности.

Если есть какие-нибудь идеи жду с нетерпением.

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

 Оглавление

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


1. "сортировка "  
Сообщение от madskull (ok) on 29-Ноя-06, 15:05 

>
>Нужно чтобы  список был отсортирован с учетом минуса, т.е:
>
а что это значит "с учетом минуса"?
man sort
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "сортировка "  
Сообщение от Peter email(??) on 29-Ноя-06, 16:24 
>
>>
>>Нужно чтобы  список был отсортирован с учетом минуса, т.е:
>>
>а что это значит "с учетом минуса"?
>man sort

Проблема в том, что сорт не отслеживает окончание названия, т.е не совсем верно формирует список. Приведу пример, он лучше покажет:

есть каталоги, в консоли отсортированы по дате создания:

aa120612.12
aa120612-2.12
aa120612-3.12
aa120612-1.12

после обработки sort

получим:

aa120612-1.12
aa120612-2.12
aa120612-3.12
aa120612.12

Это не правильно, нужно чтобы "-1" и т.д. шли в порядке убывания, с учетом названия без "-1" и т.п:

aa120612.12
aa120612-1.12
aa120612-2.12
aa120612-3.12

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

3. "сортировка "  
Сообщение от madskull (ok) on 29-Ноя-06, 16:37 
ну, вот так можно (предполагая, что у каталогов первые две буквы, потом дата):

ls | sed 'h;s/^\(..[0-9]\{6\}\)\.\([0-9]\{2\}\)/\1-0.\2/;G;s/\n/ /' | sort | cut -d\  -f2

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

4. "сортировка "  
Сообщение от Peter email(??) on 29-Ноя-06, 18:10 
>ну, вот так можно (предполагая, что у каталогов первые две буквы, потом
>дата):
>
>ls | sed 'h;s/^\(..[0-9]\{6\}\)\.\([0-9]\{2\}\)/\1-0.\2/;G;s/\n/ /' | sort | cut -d\  -f2
>

может быть первыми и три буквы, но не больше!

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

5. "сортировка "  
Сообщение от madskull (ok) on 29-Ноя-06, 22:06 
>>ну, вот так можно (предполагая, что у каталогов первые две буквы, потом
>>дата):
>>
>>ls | sed 'h;s/^\(..[0-9]\{6\}\)\.\([0-9]\{2\}\)/\1-0.\2/;G;s/\n/ /' | sort | cut -d\  -f2
>>
>
>может быть первыми и три буквы, но не больше!

Не возражаю ;)

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

6. "сортировка "  
Сообщение от DeadLoco (ok) on 30-Ноя-06, 15:21 
>>>ну, вот так можно (предполагая, что у каталогов первые две буквы, потом
>>>дата):
>>>
>>>ls | sed 'h;s/^\(..[0-9]\{6\}\)\.\([0-9]\{2\}\)/\1-0.\2/;G;s/\n/ /' | sort | cut -d\  -f2
>>>
>>
>>может быть первыми и три буквы, но не больше!
>
>Не возражаю ;)

ls | sort -t - +1

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

7. "сортировка "  
Сообщение от Peter email(??) on 01-Дек-06, 10:30 
>>>>ну, вот так можно (предполагая, что у каталогов первые две буквы, потом
>>>>дата):
>>>>
>>>>ls | sed 'h;s/^\(..[0-9]\{6\}\)\.\([0-9]\{2\}\)/\1-0.\2/;G;s/\n/ /' | sort | cut -d\  -f2
>>>>
>>>
>>>может быть первыми и три буквы, но не больше!
>>
>>Не возражаю ;)
>
>ls | sort -t - +1

Спасибо, ни один совет не помог, возможно меня не совсем поняли.
Вот мое, профанское, решение, будут рад критике:
sort(){
DP=`ls -1 -A $DISP |grep -v dpa`
DPA=`ls -1 -A $DISP |grep ^dpa`

tmp=./sort.tmp
tmp1=./sorted.tmp


for i in $DP;do
    echo $i | awk -Fdp '{print $2}'| awk -F"." '{print $1}' >> $tmp
done

for i in $DPA;do
    echo $i | awk -Fdpa '{print $2}' | awk -F"." '{print $1}'>> $tmp

file=`cat $tmp |sort |tee $tmp1`

done
}

Результат:

060626
060626-1
060703
060703-1
060704
060704
060704-1

который обрабатывается далее в нужном направлении...

Посмотрите как отработает, я уверен, что данную функцию можно написать в одну строчку.
Пока только начинаю разбираться в регульрных выражениях, так что не судите строго :)

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

9. "сортировка"  
Сообщение от vt (ok) on 01-Дек-06, 15:48 
>... уверен, что данную функцию можно написать в одну строчку.
ls | cut -d. -f1 | sort
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "сортировка "  
Сообщение от madskull (ok) on 01-Дек-06, 14:10 

>ls | sort -t - +1

ого!
а что значит +1 ? в мане не нашел...

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

10. "сортировка "  
Сообщение от DeadLoco (ok) on 01-Дек-06, 16:26 
>
>>ls | sort -t - +1
>
>ого!
>а что значит +1 ? в мане не нашел...


  +POS1 [-POS2]
              Specify  a  field within each line to use as a sorting key.  The
              field consists of the portion of the line starting at  POS1  and
              up  to  (but  not  including) POS2 (or to the end of the line if
              POS2 is not given).  The fields and character positions are num-
              bered starting with 0.

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

11. "сортировка "  
Сообщение от madskull (ok) on 01-Дек-06, 17:30 
>>
>>>ls | sort -t - +1
>>
>>ого!
>>а что значит +1 ? в мане не нашел...
>
>
>  +POS1 [-POS2]
>            
>  Specify  a  field within each line to
>use as a sorting key.  The
>            
>  field consists of the portion of the line starting
>at  POS1  and
>            
>  up  to  (but  not  including)
>POS2 (or to the end of the line if
>            
>  POS2 is not given).  The fields and character
>positions are num-
>            
>  bered starting with 0.

Прикольно, у меня такого нет, хотя, вроде, работает.
$ sort --version
sort (GNU coreutils) 6.6

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

12. "сортировка "  
Сообщение от Peter email(??) on 04-Дек-06, 09:36 
>>>
>>>>ls | sort -t - +1
>>>
>>>ого!
>>>а что значит +1 ? в мане не нашел...
>>
>>
>>  +POS1 [-POS2]
>>            
>>  Specify  a  field within each line to
>>use as a sorting key.  The
>>            
>>  field consists of the portion of the line starting
>>at  POS1  and
>>            
>>  up  to  (but  not  including)
>>POS2 (or to the end of the line if
>>            
>>  POS2 is not given).  The fields and character
>>positions are num-
>>    


>>  bered starting with 0.
>
>Прикольно, у меня такого нет, хотя, вроде, работает.
>$ sort --version
>sort (GNU coreutils) 6.6


Вот как вышел из ситуации:

ls -1 -A | perl -wne 's/[a-p]//g' |sort -t. +0 -1

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

13. "сортировка "  
Сообщение от DeadLoco (??) on 04-Дек-06, 12:13 
>Вот как вышел из ситуации:
>
>ls -1 -A | perl -wne 's/[a-p]//g' |sort -t. +0 -1

Еще вместо перла задействовать AWK - и будет достаточно оптимально.

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

14. "сортировка "  
Сообщение от Greg email(??) on 05-Дек-06, 23:35 
>>Вот как вышел из ситуации:
>>
>>ls -1 -A | perl -wne 's/[a-p]//g' |sort -t. +0 -1
>
>Еще вместо перла задействовать AWK - и будет достаточно оптимально.


А как это реализовать на AWK?

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

15. "сортировка "  
Сообщение от DeadLoco (??) on 06-Дек-06, 04:09 
>А как это реализовать на AWK?
gsub(r,s,t)
Globally substitutes s for each match of the regular expression r in the string t. Returns the number of substitutions. If t is not supplied, defaults to $0.

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

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

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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