здравствуйте. может кто-то знает, как решить данные задания. Очень срочно надо
1. В файле query4 определить среднюю сумму заказа для 1990 г.
2. В файле query4 определить количество пяродаж для каждого продавца
пример файла указан ниже
[url]s100.fotosklad.org.ua/20130110/84c4c67a48e5eeadca90b53239db9d5b1357817231.jpg[/url]
помогите с awk
здравствуйте. может кто-то знает, как решить данные задания. Очень срочно надо
1. В файле query4 определить среднюю сумму заказа для 1990 г.
2. В файле query4 определить количество пяродаж для каждого продавца
пример файла указан ниже
[url]s100.fotosklad.org.ua/20130110/84c4c67a48e5eeadca90b53239db9d5b1357817231.jpg[/url]
Есть учебник по awk. Там да же подобный пример есть.
Есть учебник по awk. Там да же подобный пример есть.
как называется?
пример списка в файле:
Показать
60S WARD 106 14-JUL-90 8314
620 TURNER 100 12-MAR-91 4450
613 TURNER 108 01-FEB-91 6400
614 MARTIN 102 01-FEB-91 23940
611 TURNER 10S O5-FEB-91 46310
618 MARTIN 102 15-FEB-91 3083
549 PETERS 226 2J-DEC-90 1620
516 PETERS 228 30-SEP-89 1815
5S3 PETERS 228 02-FEB-91 4400
526 WEST 221 04-MAR-90 7700
543 WEST 221 04-SEP-90 8400
555 WEST 221 04-MAR-91 8540
528 WEST 224 29-MAR-90 3770
558 WEST 224 31-MAR-91 1700
56S ROSS 227 01-JUN-91 4900
514 SHAW 2O1 10-OCT-91 1685
516 SHAW 201 13-OCT-91 2058.9
516 SHAW 201 13-OCT-91 2058.3
решение:
#!/bin/bash
A=($(cat query4|awk '{print $2}'|sort -u))
B=($(cat query4|awk '{print $2}'))
for i in ${!A[@]}
do
max=0
for b in ${!B[@]}
do
if [ "${A[$i]}" = "${B[$b]}" ]; then
max=$[max+1]
fi
done
echo ${A[$i]}=$max
done
SUM=0
idx=0
C=($(cat query4|grep .-91|awk '{print $5}'))
for c in ${!C[@]}
do
SUM=$(echo "scale=10;$SUM+${C[c]}"|bc)
idx=$[idx+1]
done
SUM=$(echo "scale=10;$SUM/$idx"|bc)
echo "SUM=$SUM"
Только объяснять что к чему на зло не буду :P
Только объяснять что к чему на зло не буду ae
Примеры можно решить, используя только awk, в одну строку.
Примеры можно решить, используя только awk, в одну строку.
Упс 8)
здравствуйте. может кто-то знает, как решить данные задания. Очень срочно надо
1. В файле query4 определить среднюю сумму заказа для 1990 г.
2. В файле query4 определить количество пяродаж для каждого продавца
пример файла указан ниже
s100.fotosklad.org.ua/20130110/84c4c67a … 817231.jpg
Да, данную операцию можно сделать в одну строчку, посмотри примеры хотя бы на википедии по awk. Вообщем, я взял твой пример, только не полностью, а несколько строк:
Показать
Итак, имеем
612 ALLEN 104 15-JAN-91 5678
605 WARD 106 14-JUL-90 8345
620 TURNEL 100 12-MAR-91 4450
613 TURNEL 108 01-FEB-91 6400
516 PETERS 228 15-FEB-90 4509
516 RETERS 226 30-SEP-89 4567
команда
less file | awk -F '[ ]' '{print $1,$2,$3,$4,$5}' | grep 90 | awk '{s = s + $5}
END {print ("Общая сумма заказа:" s)
print ("Средняя сумма заказа:" s/NR)}'
Общая сумма заказа:12854
Средняя сумма заказа:6427
Комментарии по команде - сначала выводишь файл на обработку awk, далее grep-ом выборку делаешь по 90 году и применяешь команду суммирования.
и вот вуаля все считает ;)
Проверку можешь сделать на калькуляторе - результат будет тот же самый. Это было первое задание. Сейчас второе напишу. Удачи)
здравствуйте. может кто-то знает, как решить данные задания. Очень срочно надо
1. В файле query4 определить среднюю сумму заказа для 1990 г.
2. В файле query4 определить количество пяродаж для каждого продавца
пример файла указан ниже
s100.fotosklad.org.ua/20130110/84c4c67a … 817231.jpg
Кстати эта команда считает по всему файлу, это я просто выписал для примера 6 строк. Потому что awk - потоковый редактор.
Вот решение второй задачи, тут еще проще
Показать
итак имеем, твой файл данных
612 ALLEN 104 15-JAN-91 5860
60S WARD 106 14-JUL-90 8314
620 TURNER 100 12-MAR-91 4450
613 TURNER 108 01-FEB-91 6400
614 MARTIN 102 01-FEB-91 23940
611 TURNER 10S O5-FEB-91 46310
618 MARTIN 102 15-FEB-91 3083
549 PETERS 226 2J-DEC-90 1620
516 PETERS 228 30-SEP-89 1815
5S3 PETERS 228 02-FEB-91 4400
526 WEST 221 04-MAR-90 7700
543 WEST 221 04-SEP-90 8400
555 WEST 221 04-MAR-91 8540
528 WEST 224 29-MAR-90 3770
558 WEST 224 31-MAR-91 1700
56S ROSS 227 01-JUN-91 4900
514 SHAW 2O1 10-OCT-91 1685
516 SHAW 201 13-OCT-91 2058.9
516 SHAW 201 13-OCT-91 2058.3
команду пишем:
less awkfile | awk -F '[ ]' '{print $1,$2,$3,$4,$5}' | grep WEST | wc -l
5
далее просто замени имя WEST на любое которое следует посчитать. И все вуаля узнаешь ответ. WEST продал 5 товаров))
less awkfile | awk -F '[ ]' '{print $1,$2,$3,$4,$5}' | grep WEST | wc -l
Сколько команд — столько и «ошибок» ;) Точнее, нерациональное их использование.
все работает. но можно и убрать эту часть
awk -F '[ ]' '{print $1,$2,$3,$4,$5}'
просто по аналогии с предыдущим примером, не стал заморачиваться. там то эти комнады нужны. чтобы обработать файл на заданный параметр 90
все работает. но можно и убрать эту часть
Можно и вручную посчитать. Название темы предполагает использование awk.
просто по аналогии с предыдущим примером, не стал заморачиваться. там то эти комнады нужны. чтобы обработать файл на заданный параметр 90
Можно и вручную посчитать. Название темы предполагает использование awk.
кстати, можно да вручную, но только если строк файле немного, как в данном примере, каждого юзера посчитать легко. а если файл с 2000 строк, тогда никак не обойтись без команд, что я писал выше. Так что это даст возможность хоть разобраться с синтаксисом awk автору данной темы :)
кстати, можно да вручную
Это был сарказм.
Так что это даст возможность хоть разобраться с синтаксисом awk автору данной темы ab
...если бы синтаксис в вашем примере был правильный.
Я не понял только, как на счет чисел с плавающей точкой?
less file | grep .-91| awk '{s = s + $5} END{print "сумма = " s}'Зы: где две десятые?
...если бы синтаксис в вашем примере был правильный.
он правильный. не соглашусь с Вами. Если были ошибки, то ответа бы не получилось. Это как в написание кода, при запуске обработчика вылезают ошибки, значит надо править.