1 (10.01.2013 15:30:24 отредактировано sergey21)

здравствуйте. может кто-то знает, как решить данные задания. Очень срочно надо
1.    В файле query4 определить среднюю сумму заказа для 1990 г.
2.    В файле query4 определить количество пяродаж для каждого продавца
пример файла указан ниже
s100.fotosklad.org.ua/20130110/84c4c67a … 817231.jpg

2

sergey21 пишет:

здравствуйте. может кто-то знает, как решить данные задания. Очень срочно надо
1.    В файле query4 определить среднюю сумму заказа для 1990 г.
2.    В файле query4 определить количество пяродаж для каждого продавца
пример файла указан ниже
s100.fotosklad.org.ua/20130110/84c4c67a … 817231.jpg

Есть учебник по awk. Там да же подобный пример есть.

3

CyberDaemon пишет:

Есть учебник по awk. Там да же подобный пример есть.

как называется?

4

sergey21 пишет:

как называется?

Самый популярный - этот.

Да, у меня Ubuntu.
Нет, не глючит.

5

пример списка в файле:

+ открыть спойлер

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

решение:

#!/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"

Только объяснять что к чему на зло не буду  ae

6 (11.01.2013 08:51:29 отредактировано Lupo Alberto)

ormorph пишет:

Только объяснять что к чему на зло не буду  ae

Примеры можно решить, используя только awk, в одну строку.

Был, был и весь вышел...

7

Lupo Alberto пишет:

Примеры можно решить, используя только awk, в одну строку.

Упс  af

8

sergey21 пишет:

здравствуйте. может кто-то знает, как решить данные задания. Очень срочно надо
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 году и применяешь команду суммирования.
и вот вуаля все считает  bx

Проверку можешь сделать на калькуляторе - результат будет тот же самый. Это было первое задание. Сейчас второе напишу.  Удачи)

добрый человек:)
Linux admin PC 3.8.0-23-generic #34-Ubuntu SMP Wed May 29 20:22:58 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
system admin of unix. i like my job. also i like to catch fish and many other things and english too.
Хочу на пляж)

9

sergey21 пишет:

здравствуйте. может кто-то знает, как решить данные задания. Очень срочно надо
1.    В файле query4 определить среднюю сумму заказа для 1990 г.
2.    В файле query4 определить количество пяродаж для каждого продавца
пример файла указан ниже
s100.fotosklad.org.ua/20130110/84c4c67a … 817231.jpg

Кстати эта команда считает по всему файлу, это я просто выписал для примера 6 строк. Потому что awk - потоковый редактор.

добрый человек:)
Linux admin PC 3.8.0-23-generic #34-Ubuntu SMP Wed May 29 20:22:58 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
system admin of unix. i like my job. also i like to catch fish and many other things and english too.
Хочу на пляж)

10

Вот решение второй задачи, тут еще проще

+ открыть спойлер

итак имеем, твой файл данных

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 товаров))

добрый человек:)
Linux admin PC 3.8.0-23-generic #34-Ubuntu SMP Wed May 29 20:22:58 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
system admin of unix. i like my job. also i like to catch fish and many other things and english too.
Хочу на пляж)

11

Linux777 пишет:

less awkfile | awk -F '[ ]' '{print $1,$2,$3,$4,$5}' | grep WEST | wc -l

Сколько команд — столько и «ошибок» bx Точнее, нерациональное их использование.

Был, был и весь вышел...

12

все работает. но можно и убрать  эту часть

Lupo Alberto пишет:

awk -F '[ ]' '{print $1,$2,$3,$4,$5}'

добрый человек:)
Linux admin PC 3.8.0-23-generic #34-Ubuntu SMP Wed May 29 20:22:58 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
system admin of unix. i like my job. also i like to catch fish and many other things and english too.
Хочу на пляж)

13

просто по аналогии с предыдущим примером, не стал заморачиваться. там то эти комнады нужны. чтобы обработать файл на заданный параметр 90

добрый человек:)
Linux admin PC 3.8.0-23-generic #34-Ubuntu SMP Wed May 29 20:22:58 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
system admin of unix. i like my job. also i like to catch fish and many other things and english too.
Хочу на пляж)

14

Linux777 пишет:

все работает. но можно и убрать  эту часть

Можно и вручную посчитать. Название темы предполагает использование awk.

Был, был и весь вышел...

15

просто по аналогии с предыдущим примером, не стал заморачиваться. там то эти комнады нужны. чтобы обработать файл на заданный параметр 90

добрый человек:)
Linux admin PC 3.8.0-23-generic #34-Ubuntu SMP Wed May 29 20:22:58 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
system admin of unix. i like my job. also i like to catch fish and many other things and english too.
Хочу на пляж)

16

Lupo Alberto пишет:

Можно и вручную посчитать. Название темы предполагает использование awk.

кстати, можно да вручную, но только если строк файле немного, как в данном примере, каждого юзера посчитать легко. а если файл с 2000 строк, тогда никак не обойтись без команд, что я писал выше. Так что это даст возможность хоть разобраться с синтаксисом awk автору данной темы  ab

добрый человек:)
Linux admin PC 3.8.0-23-generic #34-Ubuntu SMP Wed May 29 20:22:58 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
system admin of unix. i like my job. also i like to catch fish and many other things and english too.
Хочу на пляж)

17 (11.01.2013 17:50:54 отредактировано Lupo Alberto)

Linux777 пишет:

кстати, можно да вручную

Это был сарказм.

Linux777 пишет:

Так что это даст возможность хоть разобраться с синтаксисом awk автору данной темы  ab

...если бы синтаксис в вашем примере был правильный.

Был, был и весь вышел...

18

Я не понял только, как на счет чисел с плавающей точкой?

less file | grep .-91| awk '{s = s + $5} END{print "сумма = " s}'

Зы: где две десятые?

19

Lupo Alberto пишет:

...если бы синтаксис в вашем примере был правильный.

он правильный. не соглашусь с Вами. Если были ошибки, то ответа бы не получилось. Это как в написание кода, при запуске обработчика вылезают ошибки, значит надо править.

добрый человек:)
Linux admin PC 3.8.0-23-generic #34-Ubuntu SMP Wed May 29 20:22:58 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
system admin of unix. i like my job. also i like to catch fish and many other things and english too.
Хочу на пляж)