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