The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
sh - сгруппировать записи в файле, !*! fics, 14-Сен-09, 21:41  [смотреть все]
Добрый вечер. Подскажите кто в курсе дела.
Имеентся файл вида:

файл №1
код товара | cумма | дата
1 10 20090914
2 20 20090914
3 30 20090914
1 10 20090921
1 10 20090914
2 20 20090914

нужно обработать файл №1 и получить результат вида:
1 20 20090914
1 10 20090921
2 40 20090914
3 30 20090914


Вобщем если бы файл №1 представлял собой таблицу БД, то
это можно было бы сделать при поможи простого запроса:
select cod_tovara, sum(summa), p_data from file_1 group by cod_tovata, p_data
Так вот вопрос: нет ли стандартной команды? такой я не нашел.
Как быть, циклами на awk "собрать" не проблем или есть способ лучьше?

  • sh - сгруппировать записи в файле, !*! DearFriend, 23:02 , 14-Сен-09 (1)
  • sh - сгруппировать записи в файле, !*! Slavaz, 23:09 , 14-Сен-09 (2)
    >Вобщем если бы файл №1 представлял собой таблицу БД, то
    >это можно было бы сделать при поможи простого запроса:
    >select cod_tovara, sum(summa), p_data from file_1 group by cod_tovata, p_data
    >Так вот вопрос: нет ли стандартной команды? такой я не нашел.
    >Как быть, циклами на awk "собрать" не проблем или есть способ лучьше?

    Наверное, тут только awk или perl. Чтобы работать как с SQL, можно либо unixODBC понять (пушкой по воробьям, но зато непосредственно работа через SQL с текстовым файлом);

    Либо конвертнуть файл в sqlite и потом работать с данными через SQL-запросы. Например, так:

    #!/bin/sh
    sqlite3 test.sq3 'create table file_1 (cod_tovara int, summa int, p_data timestamp)'
    sqlite3 test.sq3 "$(grep -P '^\d' text.txt | awk '{print "insert into file_1 values ("$1","$2","$3");"}')"

    ну и дальше уже приведенной Вами командой выгребаем нужные данные:
    sqlite3 test.sq3 "select cod_tovara, sum(summa), p_data from file_1 group by cod_tovara, p_data"

    • sh - сгруппировать записи в файле, !*! fics, 00:06 , 15-Сен-09 (3)
      да это сильно уже замудрено в sqllite... Я просто имел введу, что есть, к примеру, команда join для склеивания, почти аналогичная sql-ой и может есть для такой задачи как в вопросе, а так да: uniq - c, получили количесво - повторный проходом  
      awk '{$kol_vo*$sum}' > file

      • sh - сгруппировать записи в файле, !*! fics, 00:08 , 15-Сен-09 (4)
        >> можно либо unixODBC понять (пушкой по воробьям, но зато непосредственно работа через SQL с текстовым файлом);

        Ага круто вы взяли, если бы я понял, уже сменил бы работу

        • sh - сгруппировать записи в файле, !*! Slavaz, 01:24 , 15-Сен-09 (5)
          >>> можно либо unixODBC понять (пушкой по воробьям, но зато непосредственно работа через SQL с текстовым файлом);
          >Ага круто вы взяли, если бы я понял, уже сменил бы работу

          - можно либо unixODBC понять
          + можно либо unixODBC поднять

          Извините, ошибся. :)

          > да это сильно уже замудрено в sqllite...

          да нет. Две команды: первая создаёт БД, вторая команда - вкачивает данные. И дальнейшая работа с данными происходит через SQL-запросы. Сделать скрипт, "обвязывающий" данные SQLем - как два пальца :) Фактически, в предыдущем посту я уже написал скрипт.

          >>> Вобщем если бы файл №1 представлял собой таблицу БД, то
          >>> это можно было бы сделать при поможи простого запроса:
          >>> select cod_tovara, sum(summa), p_data from file_1 group by cod_tovata, p_data

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

  • sh - сгруппировать записи в файле, !*! phpcoder, 09:31 , 15-Сен-09 (6)
    coder@proger-ub5 ~ $ sort -n -k1,3 data.txt | uniq -c | awk '{printf("%d %d %d\n", $2, $1*$3, $4)}'
    1 20 20090914
    1 10 20090921
    2 40 20090914
    3 30 20090914




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

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