The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
оставить только начальное и конечное значение, !*! rec, 06-Июн-11, 13:42  [смотреть все]
Есть данные в виде таблицы:

902  2700000  2709999
902  2710000  2719999
902  2720000  2729999
902  2730000  2739999
902  2740000  2749999
902  2750000  2759999
902  2760000  2769999
902  2780000  2789999
902  2790000  2799999
903  2810000  2819999
903  2820000  2829999

(Информация о нумерации сотовых операторов).
Чтобы точнее сформулировать задачу, приведу конечный результат, который хотелось бы получить:

902  2700000  2769999  
902  2780000  2799999
903  2810000  2829999

Т.е. диапазон нумерации в отдельных строках является продолжением нумерации предыдущей строки. Хотелось бы иметь только начальное и конечное значение приведенных диапазонов и те, которые являются продолжением диапазона из предыдущей строки объединить в один диапазон.
Реально скрипт такой сочинить? Не подкините идеи?
Можно для начала упростить задачу: убрать первый столбец (902, 903).

  • оставить только начальное и конечное значение, !*! Andrey Mitrofanov, 14:19 , 06-Июн-11 (1)
    > Чтобы точнее сформулировать задачу, приведу конечный результат, который хотелось бы получить:
    > 902  2700000  2769999
    > 902  2780000  2799999
    > 903  2810000  2829999

    $ awk 'function f(){if(a!="")print a" "b" "c;a=$1;b=$2;c=$3}{if(a!=""&&$1==a&&$2==c+1)c=$3;else f()}END{f()}' <data
    902 2700000 2769999
    902 2780000 2799999
    903 2810000 2829999
    $ _

    Как я могу получить сои деньги?

  • оставить только начальное и конечное значение, !*! Aquarius, 16:57 , 06-Июн-11 (7)
    >[оверквотинг удален]
    > Чтобы точнее сформулировать задачу, приведу конечный результат, который хотелось бы получить:
    > 902  2700000  2769999
    > 902  2780000  2799999
    > 903  2810000  2829999
    > Т.е. диапазон нумерации в отдельных строках является продолжением нумерации предыдущей
    > строки. Хотелось бы иметь только начальное и конечное значение приведенных диапазонов
    > и те, которые являются продолжением диапазона из предыдущей строки объединить в
    > один диапазон.
    > Реально скрипт такой сочинить? Не подкините идеи?
    > Можно для начала упростить задачу: убрать первый столбец (902, 903).

    я бы посоветовал сначала преобразовать в префиксную нотацию, а потом, если требуется, обратно;
    то есть, то что получися, будет списком начал номеров, таких, что если номер начинается с этих цифр, он входит в диапазон
    к примеру, для вашего списка получится
    902270
    902271
    902272
    902273
    902274
    902275
    902276
    902278
    902279
    903281
    903282
    у вас пример данных не универсален, решив задачу на этих номерах, вы можете столкнуться с проблемами с другими, более раздробленными диапазонами, к примеру
    902 2700000 2703999
    из которого получается такой список префиксов:
    9022700
    9022701
    9022702
    9022703
    то есть, в общем случае, получается не одна строка
    список префиксов сортируется и анализируется на покрывающие префиксы (диапазон, где весь префикс повторяется кроме последней цифры, на месте которой есть все от 0 до 9, заменяется одним префиксом без этой последней цифры)
    список префиксов вернуть к исходному формату - плевое дело - дописать недостающее количество нулей для начала и девяток для конца диапазона

    P.S. "для начала" надо не убирать первый столбец, а "приклеить" его ко второму и третьему

    • оставить только начальное и конечное значение, !*! rec, 08:35 , 07-Июн-11 (9)
      >[оверквотинг удален]
      > у вас пример данных не универсален, решив задачу на этих номерах, вы
      > можете столкнуться с проблемами с другими, более раздробленными диапазонами
      > то есть, в общем случае, получается не одна строка
      > список префиксов сортируется и анализируется на покрывающие префиксы (диапазон, где весь
      > префикс повторяется кроме последней цифры, на месте которой есть все от
      > 0 до 9, заменяется одним префиксом без этой последней цифры)
      > список префиксов вернуть к исходному формату - плевое дело - дописать недостающее
      > количество нулей для начала и девяток для конца диапазона
      > P.S. "для начала" надо не убирать первый столбец, а "приклеить" его ко
      > второму и третьему

      открывая тему, старался максимально упростить задачу, было желание получить определенный результат и убедиться в возможности таких преобразований юниксовскими командами (не сомневаюсь в возможностях программистов сделать это более рационально с помощью соответствующих языков программирования, коими я, к сожалению, не владею).
      Ваше замечание о другом дроблении префиксов (и оно имеет место быть) очень своевременно, обращу на это внимание.
      Конечная задача конечно же намного сложнее и запутаннее. Спасибо за ваш совет по использованию полного 10-ти значного префикса, источник перечислил их (префиксы) в удобной для себя форме. Для работы удобнее будет объединить цифры первого столбца со вторым и третьим.




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

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