The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
bash скрипт для поиска, !*! Tribal, 17-Апр-23, 11:05  [смотреть все]
Доброго времени суток, уважаемые! я тут новенький да и в программировании не спец.
Есть задача:
В текстовом фале есть некая база, в которой данные отсортированы по годам.
требуется разбить этот фал на отдельные - содержащие только один год
Я так понимаю нужно сделать скрипт, который бы искал первое совпадение по году, запоминал номер строки, далее искал первое совпадение со следующим годом, потом копировал текст между этими двумя строками в новый файл и так далее по нарастающей до конца.
Помогите реализовать это в коде...
  • bash скрипт для поиска, !*! Аноним, 12:55 , 17-Апр-23 (1)
    echo -e "2001 djdjjd\n2004 fdkfkfk\n2099\n" | while read y r ; do echo $y $r >> $y.txt ; done
  • bash скрипт для поиска, !*! Diablopc, 20:16 , 17-Апр-23 (2)
    Если строка начинается с года
    grep -e "^2000" filename.txt

    Если год обрамлен пробелами в тексте
    grep -w "2000" filename.txt

    Ну и читай https://www.howtoforge.com/tutorial/linux-grep-command/amp/

    • bash скрипт для поиска, !*! Tribal, 20:44 , 17-Апр-23 (3)
      > Если строка начинается с года
      >
      grep -e "^2000" filename.txt

      > Если год обрамлен пробелами в тексте
      >
      grep -w "2000" filename.txt

      > Ну и читай https://www.howtoforge.com/tutorial/linux-grep-command/amp/

      разделитель - ";"
      файл с расширением .csv

      • bash скрипт для поиска, !*! Diablopc, 01:10 , 18-Апр-23 (4)
        > разделитель - ";"
        > файл с расширением .csv

        Ну таки либо читай маны,  либо,  если все-же хочешь чтобы все за тебя сделали - дай хоть пару строк из файла в качестве примера

        • bash скрипт для поиска, !*! Tribal, 09:19 , 18-Апр-23 (5)
          >> разделитель - ";"
          >> файл с расширением .csv
          > Ну таки либо читай маны,  либо,  если все-же хочешь чтобы
          > все за тебя сделали - дай хоть пару строк из файла
          > в качестве примера

          "Приволжский;Кировская область;-;-;А;01.01.1988;01.01.1988;1987;-;271306;0152192;-;11;2;-;-;-;-;71;-;-"

          • bash скрипт для поиска, !*! Diablopc, 11:30 , 18-Апр-23 (6)
            >>> разделитель - ";"
            >>> файл с расширением .csv
            >> Ну таки либо читай маны,  либо,  если все-же хочешь чтобы
            >> все за тебя сделали - дай хоть пару строк из файла
            >> в качестве примера
            > "Приволжский;Кировская область;-;-;А;01.01.1988;01.01.1988;1987;-;271306;0152192;-;11;2;-;-;-;-;71;-;-"

            #!/bin/bash   
            for y in $(seq $1 $2)
               do
                   grep -e "\;$y\;" $3 > $y.txt
               done

            Использование:

            #~ ./scriptname 0000 1111 input.csv

            Где 0000 начало диапазона годов, 1111 конец диапазона годов,  input.csv имя файла для сортировки

            Основной минус:  на каждый год оно будет перечитывать файл заново.

            • bash скрипт для поиска, !*! Аноним, 12:09 , 18-Апр-23 (8)
              >[оверквотинг удален]
              >    do
              >        grep -e "\;$y\;" $3 >
              > $y.txt
              >    done
              >
              > Использование:
              >
              #~ ./scriptname 0000 1111 input.csv

              > Где 0000 начало диапазона годов, 1111 конец диапазона годов,  input.csv имя
              > файла для сортировки
              > Основной минус:  на каждый год оно будет перечитывать файл заново.

              Зачем ты взял первый ответ в треде и испортил его - сделал так, чтобы файл каждый раз перезаписывался содержимым единственной строчки? Не умеешь - хотя бы не учи.

      • bash скрипт для поиска, !*! Аноним, 11:58 , 18-Апр-23 (7)
        > разделитель - ";"
        > файл с расширением .csv

        https://www.cyberciti.biz/faq/unix-linux-bash-read-comma-sep.../

        И ознакомься с мануалом по шеллу. Комментаторы сами ничего не умеют. Полчаса чтения и будешь знать больше их. Смотреть противно на эту вакханалию.

        • bash скрипт для поиска, !*! Pahanivo, 18:59 , 19-Апр-23 (9)
          Или про perl и его regex почитать, там кода на три пять строк.
          Думаю тут вообще вся задача закроется примерами из манов на 99%))


          • bash скрипт для поиска, !*! Аноним, 12:44 , 21-Апр-23 (12)
            > Или про perl и его regex почитать, там кода на три пять
            > строк.
            > Думаю тут вообще вся задача закроется примерами из манов на 99%))

            Перлом будет слишком много гемора открывать-закрывать разные файлы, на шелле вывод перенаправлять гораздо проще. Регулярки можно и в шелле применить. grep -oP например.
            Тут вся задача высосана из пальца, в том смысле, что если нужны данные за какой-то год, ты просто грепаешь данные и смотришь вывод. Плодить файлики ради этого не продуктивно.

  • bash скрипт для поиска, !*! ыы, 09:10 , 20-Апр-23 (10)
    > Доброго времени суток, уважаемые! я тут новенький да и в программировании не
    > спец.
    > Есть задача:
    > В текстовом фале есть некая база, в которой данные отсортированы по годам.
    > требуется разбить этот фал на отдельные - содержащие только один год
    > Я так понимаю нужно сделать скрипт, который бы искал первое совпадение по
    > году, запоминал номер строки, далее искал первое совпадение со следующим годом,
    > потом копировал текст между этими двумя строками в новый файл и
    > так далее по нарастающей до конца.
    > Помогите реализовать это в коде...

    Возможно Вы думаете неправильно.
    Если маркер года находится в каждой строке - то нет необходимости запоминать первое вхождение и искать строку с новым.
    достаточно просто  парсить файл построчно, и копировать каждую строку в файл с именем которое мы определим как год, извлеченный из той же строки. вывод в файл делает ся в режиме добавления. этот режим работает так- если файла нет- он создается. все последующие строки в него добаляются.
    тоесть  чтото вроде

    получить строку в переменную
    получить новую переменную "как мы определили год" из строки
    вывести строку в файл в режиме добавления, имя которого собрано из переменной с годом

    Решение которое описали Вы - так же возможно, но в данном случае оно ненужно.


  • bash скрипт для поиска, !*! Tribal, 15:40 , 21-Апр-23 (13)
    Спасибо всем за ответы, но как я говорил я далек от программирования.
    Дело решилось ручным методом, нашел строки с первым упоминанием года и скопировал диапазон в новые файлы




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

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