diff --git a/popular_cities.sh b/popular_cities.sh new file mode 100755 index 000000000..b57377175 --- /dev/null +++ b/popular_cities.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +echo "3 самых популярных города среди пользователей" + +# Проверяем наличие аргумента +if [ $# -eq 0 ]; then + echo "Необходимо передать имя файла в качестве аргумента!" + exit 1 +fi + +# Выводим три самых популярных города +# awk '{print $3}' $1 - выводим третий столбец из заданного файла (столбец с городами) +# sed 1d - удаляем строку с заголовком столбца +# sort - сортируем города, необходимо для нормальной работы команды uniq +# uniq -c - выводим уникальные города с количеством вхождений +# sort -nrk1 - сортируем по столбцу количества (-k1) как числа (-n) в обратном порядке (-r) +# head -n3 - оставляем только 3 первых строки +# awk '{print $2}' - выводим только названия городов (обрезаем количество их вхождений) + +awk '{print $3}' $1 | \ + sed 1d | \ + sort | \ + uniq -c | \ + sort -nrk1 | \ + head -n3 | \ + awk '{print $2}' + diff --git a/sum.sh b/sum.sh new file mode 100755 index 000000000..3dad54f50 --- /dev/null +++ b/sum.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +# Проверяем наличие аргументов +if [ $# -ne 2 ]; then + echo "Необходимо передать два аргумента!" + exit 1 +fi + +# Проверяем валидность аргументов +REGEX="^[+-]?[0-9]+([.][0-9]+)?$" +if [[ ! (($1 =~ $REGEX) && ($2 =~ $REGEX)) ]]; then + echo "Оба аргумента должны быть числами!" + exit 1 +fi + +# Перенаправляем вывод ошибок, чтобы не видеть ошибку, если bc не установлен +exec 2>/dev/null + +# Пробуем запустить bc +bc -v >/dev/null + +if [ $? -ne 0 ]; then # Если код возврата не 0, значит, bc не установлен, + + # Перенаправляем вывод ошибок обратно в stdout + exec 2>&1 + + # устанавливаем bc + read -n 1 -p "Для выполнения сложения необходимо установить bc. Установить? (y/n)? " answer + if [ $answer == 'y' ] || [ $answer == 'Y' ]; then + sudo apt install bc + else + exit 1 + fi +fi + +# Выполняем сложение c использованием bc +result=$(echo $1 + $2 | bc) + +# Выводим результат +echo "Сумма чисел равна: $result" \ No newline at end of file diff --git a/sum2.sh b/sum2.sh new file mode 100755 index 000000000..8da266e3b --- /dev/null +++ b/sum2.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Сложение двух вещественных чисел без использования bc (с использованием awk) + +# Проверяем наличие аргументов +if [ $# -ne 2 ]; then + echo "Необходимо передать два аргумента!" + exit 1 +fi + +# Проверяем валидность аргументов +REGEX="^[+-]?[0-9]+([.][0-9]+)?$" +if [[ ! (($1 =~ $REGEX) && ($2 =~ $REGEX)) ]]; then + echo "Оба аргумента должны быть числами!" + exit 1 +fi + +# Выполняем сложение c использованием awk +result=$(echo $1 $2 | awk '{printf $1 + $2}' ) + +# Выводим результат +echo "Сумма чисел равна: $result" \ No newline at end of file diff --git a/user_cities.txt b/user_cities.txt new file mode 100644 index 000000000..9d46038eb --- /dev/null +++ b/user_cities.txt @@ -0,0 +1,11 @@ +id user city phone +1 test Moscow 1234123 +2 test2 Saint-P 1232121 +3 test3 Tver 4352124 +4 test4 Milan 7990923 +5 test5 Moscow 908213 +6 test6 Saint-P 908213 +7 test7 Moscow 908213 +8 test8 Saint-P 908213 +9 test9 Milan 908213 +10 test10 Moscow 908213 \ No newline at end of file