Добрый день!
Столкнулся с такой проблемой, есть n файлов вида
Ключ 1;Ключ 2;Ключ 3;значение
нужно найти средние арифметические значений, для одинаковых ключей, отсеять значения меньше половины среднего и снова найти среднее, при этом в некоторых файлах для ключей может не быть
например, есть три файла
file1.txt
01 Feb 2014;02 Feb 2014;Alpha;168
02 Feb 2014;03 Feb 2014;Alpha;200
01 Feb 2014;02 Feb 2014;Gama;1204
02 Feb 2014;03 Feb 2014;Gama;1139
file2.txt
01 Feb 2014;02 Feb 2014;Alpha;193
02 Feb 2014;03 Feb 2014;Alpha;178
01 Feb 2014;02 Feb 2014;Beta;29
02 Feb 2014;03 Feb 2014;Beta;34
01 Feb 2014;02 Feb 2014;Gama;1354
02 Feb 2014;03 Feb 2014;Gama;1113
file3.txt
01 Feb 2014;02 Feb 2014;Alpha;172
01 Feb 2014;02 Feb 2014;Beta;35
02 Feb 2014;03 Feb 2014;Beta;40
01 Feb 2014;02 Feb 2014;Gama;44
02 Feb 2014;03 Feb 2014;Gama;1300
Итого, считаем среднее
avg.txt
01 Feb 2014;02 Feb 2014;Alpha;177
02 Feb 2014;03 Feb 2014;Alpha;189
01 Feb 2014;02 Feb 2014;Beta;32
02 Feb 2014;03 Feb 2014;Beta;37
01 Feb 2014;02 Feb 2014;Gama;867
02 Feb 2014;03 Feb 2014;Gama;1184
Выкидываем все значения, которые меньше полученного среднего/2,
такое только одно 01 Feb 2014;02 Feb 2014;Gama;44 (44 < 867/2)
Новые файлы:
file1_new.txt
01 Feb 2014;02 Feb 2014;Alpha;168
02 Feb 2014;03 Feb 2014;Alpha;200
01 Feb 2014;02 Feb 2014;Gama;1204
02 Feb 2014;03 Feb 2014;Gama;1139
file2_new.txt
01 Feb 2014;02 Feb 2014;Alpha;193
02 Feb 2014;03 Feb 2014;Alpha;178
01 Feb 2014;02 Feb 2014;Beta;29
02 Feb 2014;03 Feb 2014;Beta;34
01 Feb 2014;02 Feb 2014;Gama;1354
02 Feb 2014;03 Feb 2014;Gama;1113
file3_new.txt
01 Feb 2014;02 Feb 2014;Alpha;172
01 Feb 2014;02 Feb 2014;Beta;35
02 Feb 2014;03 Feb 2014;Beta;40
02 Feb 2014;03 Feb 2014;Gama;1300
Считаем заново средние значения:
avg_new.txt
01 Feb 2014;02 Feb 2014;Alpha;177
02 Feb 2014;03 Feb 2014;Alpha;189
01 Feb 2014;02 Feb 2014;Beta;32
02 Feb 2014;03 Feb 2014;Beta;37
01 Feb 2014;02 Feb 2014;Gama;1279
02 Feb 2014;03 Feb 2014;Gama;1184
Все
Собственно сам вопрос, есть ли способ без массивов? Возможно все как всегда решается парой строчек
Спасибо
Файлы как база данных
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Услуги хостинговой компании Host-Food.ru
Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
- Alex Keda
- стреляли...
- Сообщения: 35426
- Зарегистрирован: 2004-10-18 14:25:19
- Откуда: Made in USSR
- Контактная информация:
-
- лейтенант
- Сообщения: 613
- Зарегистрирован: 2009-08-05 16:10:46
- Откуда: Украина Днепропетровск-Киев
- Контактная информация:
Re: Файлы как база данных
Если еще актуально 
Лучше поздно, чем никогда.

Лучше поздно, чем никогда.
Код: Выделить всё
awk -F";" '{ mass[FILENAME";"$1";"$2";"$3]=$4; sum[$1";"$2";"$3]+=$4; count[$1";"$2";"$3]++; }
END{ for(i in sum) {
avg[i]=sum[i]/count[i];
printf "%s;%d\n", i, avg[i] > "avg.txt"
}
for(i in mass) {
split(i,fln,";");
split(fln[1],flname_a,".");
flname=flname_a[1]"_new."flname_a[2];
ind=fln[2]";"fln[3]";"fln[4];
if((avg[ind]/2) < mass[i]) {
sum2[ind]+=mass[i];
count2[ind]++;
printf "%s;%d\n", ind, massall[i] > flname
}
}
for(i in sum2) {
avg2[i]=sum2[i]/count2[i];
printf "%s;%d\n", i, avg2[i] > "avg_new.txt"
}
}' file1.txt file2.txt file3.txt
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.
-
- мл. сержант
- Сообщения: 92
- Зарегистрирован: 2011-01-26 17:24:07
Re: Файлы как база данных
Спасибо! Я уже сделал все посредством экспорта в БД, решил так будет работать быстрее чем через shell и массивы, да и дальнейшие преобразования оказалось гораздо проще делать запросами.
Все равно большое спасибо
Все равно большое спасибо

-
- лейтенант
- Сообщения: 613
- Зарегистрирован: 2009-08-05 16:10:46
- Откуда: Украина Днепропетровск-Киев
- Контактная информация:
Re: Файлы как база данных
Будет ли работать быстрее через базу - не уверен, но если дальнейшая обработка\использование связаны с базой - решение верное.
В любом случае я сам слишком затянул с решением.
Семейная ситуация знаете ли, пополнение нагрянуло
В любом случае я сам слишком затянул с решением.
Семейная ситуация знаете ли, пополнение нагрянуло

Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.