2010-04-16 2 views
2

У меня есть файл журнала транзакций в формате CSV, который я хочу использовать для запуска статистики. Журнал имеет следующие поля:Вычисление статистики непосредственно из файла CSV

 
date: Time/date stamp 
salesperson: The username of the person who closed the sale 
promo: sum total of items in the sale that were promotions. 
amount: grand total of the sale 

Я хотел бы получить следующую статистику:

 
salesperson: The username of the salesperson being analyzed. 
minAmount: The smallest grand total of this salesperson's transaction. 
avgAmount: The mean grand total.. 
maxAmount: The largest grand total.. 
minPromo: The smallest promo amount by the salesperson. 
avgPromo: The mean promo amount... 

Я соблазн построить структуру базы данных, импортировать этот файл, писать SQL, и тянуть из статистики. Мне не нужно ничего больше из этих данных, чем эти статистические данные. Есть ли более простой способ? Я надеюсь, что скрипт bash может сделать это легко.

+0

С какой проблемой вы столкнулись? Сама статистика? Структуры данных? Разбор? Это не очень сложная проблема для любого языка сценариев, с которым вам удобно. – Kena

+0

* cuddles PowerShell * ... – Joey

ответ

2

Может также выпустить awk-скрипт для этого. Это только CSV с несколькими переменными.

+0

Awk является естественным для этого - даже начался/закончился, поэтому вы можете инициализировать, а затем вычислить средние значения легко –

+0

очень интересно. Как я могу использовать awk для «продавца GROUP BY»? – User1

+0

@ User1: с ассоциативным массивом или 'asort()' или 'asorti()'. –

1

Вы можете прокручивать строки в CSV и использовать переменные скрипта bash для хранения минимальных/минимальных сумм. Для среднего просто держите общее количество, а затем разделите на общее количество строк (не считая возможного заголовка).

Вот некоторые useful snippets для работы с CSV-файлами в bash.

Если ваши данные могут быть указаны (например, поскольку поле содержит запятую), обработка с помощью bash, sed и т. Д. Становится намного сложнее.

3

TxtSushi делает это:

tssql -table trans transactions.csv \ 
'select 
    salesperson, 
    min(as_real(amount)) as minAmount, 
    avg(as_real(amount)) as avgAmount, 
    max(as_real(amount)) as maxAmount, 
    min(as_real(promo)) as minPromo, 
    avg(as_real(promo)) as avgPromo 
from trans 
group by salesperson'

У меня есть куча example scripts, показывающий, как использовать его.

Редактировать: фиксированный синтаксис

+0

+1 Это выглядит намного проще. В следующий раз мне нужно будет сделать снимок. BTW: Вы авардварк? – User1

+0

Нет, сэр, я сахарный планер – Keith

+0

Это то, чего я боялся. Надеюсь, ваш хозяин не разорился за то, что вы в его доме (если вы в США). Я слышал, что вы, ребята, были «особенно умны», но, вау, ответ на SO довольно высок. Так, это сахара, который делает вас таким умным? – User1