Advertisement
Guest User

handler.sh

a guest
Oct 16th, 2019
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.56 KB | None | 0 0
  1. #!/bin/bash
  2. # $1 - директория с исходными файлами $2 - их расширение
  3. # $3 - директория с файлами результата $4 - их расширение
  4. if [ ! -d "$1" ] || [ -z "$2" ] || [ -z "$4" ]; then #проверка расширений и директории
  5. exit
  6. fi
  7. if [ ! -d "$3" ] #проверка на существование директории
  8. then # если директрия не существует
  9. mkdir $3 # создаём её
  10. fi
  11. files=($1/*.$2) # маска для файлов с заданным расширением из выбранной директории
  12. if [ ! -f "$files" ] # проверяем существование файлов
  13. then
  14. exit # если файлы не найдены, завершаем выполнение
  15. fi
  16. filename="`date +"%Y%m%d%H%M%S"`.$4" # формируем имя файла
  17. i=0 # номер строки массива
  18. lines=() # 2-ый массив id сумма по проверенным строкам
  19. for file in ${files[@]} # перебираем полученные файлы
  20. do
  21. while read line # перебираем строки файла
  22. do
  23. number=0 # номер элемента в стоке
  24. sum=0
  25. for element in $line # перебираем элементы в стоке
  26. do
  27. let "number++"
  28. if [ $number -eq "1" ] # проверка порядкового номера элемента
  29. then
  30. id=$element # если элемент 1, то это id
  31. else
  32. let "sum += $element" # иначе суммируем
  33. fi
  34. done
  35. lines+=("$id $sum") # добавляем новую строку в массив
  36. k=0 # номер строки массива
  37. while (( k != i ))
  38. do
  39. if [[ -z ${lines[$k]} ]] # проверка на пустоту
  40. then
  41. let "k++"
  42. continue # возвращаемся в начало цикла
  43. fi
  44. c=${lines[$k]}
  45. massiv=( $c ) # копирование строки массива в буфферную переменную
  46. if [ $id -eq ${massiv[0]} ] # проверяем совпадение id
  47. then
  48. let sum+=${massiv[1]} # если совпал, то заносим новое значение суммы
  49. unset lines[$k] # сбрасываем значение
  50. fi
  51. lines[$i]="$id $sum" # обновляем информацию о сумме
  52. let k++
  53. done
  54. let "i++"
  55. done < "$file"
  56. done
  57. IFS=$'\n'
  58. sorted=($(sort -n «<"${lines[*]}"))
  59. unset IFS
  60. l=0 # номер строки массива
  61. while ((l != i))
  62. do
  63. if [[ ! -z ${sorted[$l]} ]]
  64. then
  65. echo "${sorted[$l]}" » "$3/$filename"
  66. fi
  67. let "l++"
  68. done
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement