1. Яблоко 9 грн.
2. Груша 20 грн.
3. Лимон 30 грн.
4. Апельсин 30 грн.
5. Банан 10 грн.
6. Айва 20 грн.
7. Вишня 30 грн.
8. Черешня 25 грн.
9. Слива 15 грн.
10. Клубника 40 грн.
Скрипты bash
Задача 1.
Имеется некий файл
Код:
Задача вывести название фрукта, цена которого ближе всего к средней цене.
Код:
avarage="$(awk '{s +=$3}END{temp=s/NR; print temp}' fileToTask3.txt)"
awk '{s=$3; name =$2;minValue=50;
if(s>av)
{
temp=s-av
if(temp<minValue)
{
minValue=temp;
line=name;
}
}
else
{
temp=av-s
if(temp<minValue)
{
minValue=temp;
line=name
}
}
} END {print line} ' av=$avarage fileToTask3.txt
awk '{s=$3; name =$2;minValue=50;
if(s>av)
{
temp=s-av
if(temp<minValue)
{
minValue=temp;
line=name;
}
}
else
{
temp=av-s
if(temp<minValue)
{
minValue=temp;
line=name
}
}
} END {print line} ' av=$avarage fileToTask3.txt
В переменной avarage хранится среднее значение всех цен, далее передаём его на второй awk. Далее логика такая: Если цена больше средней цены, то отнимаем от неё среднюю цену, если меньше - отнимаем от средней цены цену фрукта. Таким образом мы получаем что то вроде модуля разницы между ценами. Где минимальный этот модуль - там и цена самая близкая.
И тут, кажется мне, проблема. Переменная minValue должна хранить минимальный модуль, но, как я понял, она инициализируется на каждой итерации заново. Если я её не объявлю до ифов, то за пределами её вообще видно не будет. Что неверно в логике? Как перестроить программу? Буду рад всякой помощи. Спасибо.
Решено. Надо было всего лишь объявить переменную до awk и передать ей её в качестве параметра.
или объявить переменную в BEGIN{ minValue=0;}
Узнать время запуска системы. Команда uptime может возвратить продолжительность работы системы, знает кто трезвый метод как узнать время запуска?
man last