Загрузка данных


#!/bin/bash

group=$1
brigada=$2

data_file="file_test"

if [ ! -f "$data_file" ] || [ ! -s "$data_file" ]; then
    echo "Файл $data_file пуст или не существует."
    exit 1
fi

# Меню выбора поля
echo "Доступные поля:"
echo "1 - Номер (числовой)"
echo "2 - Фамилия (текст)"
echo "3 - Год (числовой)"
echo "4 - Город (текст)"
echo "5 - Балл (числовой с плавающей точкой)"
read -p "Введите номер поля для сортировки (1–5): " field

if ! [[ "$field" =~ ^[1-5]$ ]]; then
    echo "Ошибка: введите число от 1 до 5."
    exit 1
fi

# Выбор направления
read -p "Направление сортировки (asc - по возрастанию, desc - по убыванию): " order
case "$order" in
    desc|DESC|убыв|УБЫВ) order_opt="-r" ;;
    *)                    order_opt="" ;;
esac

# Определяем позиции полей (фиксированная ширина)
# поле1: символы 1–5, поле2: 6–15, поле3: 16–25, поле4: 26–35, поле5: 36–45
case $field in
    1) start=1  len=5  ;;  # номер
    2) start=6  len=10 ;;  # фамилия
    3) start=16 len=10 ;;  # год
    4) start=26 len=10 ;;  # город
    5) start=36 len=10 ;;  # балл
esac

# Сортировка: добавляем ключ в начало строки, сортируем, убираем ключ
if [ "$field" -eq 1 ] || [ "$field" -eq 3 ] || [ "$field" -eq 5 ]; then
    # Числовая сортировка (для полей 1,3,5)
    awk -v s="$start" -v l="$len" '{ key = substr($0, s, l); print key "\t" $0 }' "$data_file" |
    sort -n $order_opt -k1,1 |
    cut -f2-
else
    # Строковая сортировка (для полей 2,4)
    awk -v s="$start" -v l="$len" '{ key = substr($0, s, l); print key "\t" $0 }' "$data_file" |
    sort $order_opt -k1,1 |
    cut -f2-
fi