Добрый вечер. Подскажите кто в курсе дела.
Имеентся файл вида:файл №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 "собрать" не проблем или есть способ лучьше?
cat filename | sort | uniq
>Вобщем если бы файл №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"
да это сильно уже замудрено в sqllite... Я просто имел введу, что есть, к примеру, команда join для склеивания, почти аналогичная sql-ой и может есть для такой задачи как в вопросе, а так да: uniq - c, получили количесво - повторный проходом
awk '{$kol_vo*$sum}' > file
>> можно либо unixODBC понять (пушкой по воробьям, но зато непосредственно работа через SQL с текстовым файлом);Ага круто вы взяли, если бы я понял, уже сменил бы работу
>>> можно либо 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-команды". Если неправильно понял - сорри.
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
>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
да решил я свой вопрос, хотел просто за команду такую узнать и все.
Спасибо.