The OpenNET Project / Index page

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

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

"sh - сгруппировать записи в файле"  +/
Сообщение от fics on 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 "собрать" не проблем или есть способ лучьше?

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

Оглавление

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


1. "sh - сгруппировать записи в файле"  +/
Сообщение от DearFriend on 14-Сен-09, 23:02 
cat filename | sort | uniq
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "sh - сгруппировать записи в файле"  +/
Сообщение от Slavaz (ok) on 14-Сен-09, 23:09 
>Вобщем если бы файл №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"

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

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

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

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

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

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

5. "sh - сгруппировать записи в файле"  +/
Сообщение от Slavaz (ok) on 15-Сен-09, 01:24 
>>> можно либо 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-команды". Если неправильно понял - сорри.

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

6. "sh - сгруппировать записи в файле"  +/
Сообщение от phpcoder email(??) on 15-Сен-09, 09:31 
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

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

7. "sh - сгруппировать записи в файле"  +/
Сообщение от fics on 15-Сен-09, 13:46 
>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

Это если суммы одинаковые, а если
1 10.9 20090921
да решил я свой вопрос, хотел просто за команду такую узнать и все.
Спасибо.

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

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

Индекс форумов | Темы | Пред. тема | След. тема




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

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