Advertisement
Guest User

Untitled

a guest
Nov 14th, 2019
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 1.40 KB | None | 0 0
  1. #!/usr/bin/bash
  2.  
  3. function usage() {
  4.     echo "analyzer.sh [ПАРАМЕТР] <ФАЙЛ> [ИСТОЧНИК]"
  5.     echo "Ищет медиану по времени обработки запроса в ФАЙЛе для указанного в параметрах ИСТОЧНИКа (по всем запросам, если он не указан)."
  6.     echo ""
  7.     echo "Аргументы"
  8.     echo "  -h, --help  показать эту справку и выйти"
  9.     exit 0
  10. }
  11.  
  12. if [ "$#" -gt 2 ] || [ -z "$1" ] || [[ "$1" =~ ^-h$|^--help$ ]] || [[ "$2" =~ ^-h$|^--help$ ]]; then
  13.     usage
  14. fi
  15.  
  16. if [ ! -e "$1" ]; then
  17.     echo "Файл $1 не существует"
  18.     exit 1
  19. fi
  20.  
  21. if [ ! -r "$1" ]; then
  22.     echo "Нет прав на чтение $1"
  23.     exit 1
  24. fi
  25.  
  26. re="^(([0-9][0-9]?|[0-1][0-9][0-9]|2[0-5][0-5]|2[0-4][0-9])[.]){3}([0-9][0-9]?|[0-1][0-9][0-9]|2[0-5][0-5]|2[0-4][0-9])$"
  27. if [[ -n $2 && ! "$2" =~ $re ]]; then
  28.     echo "Источник должен быть правильным IPv4 адресом"
  29.     exit 1
  30. fi
  31.  
  32. awk -v source="$2" -F "|" '
  33. $0~source {arr[i++] = $5}
  34. END {
  35.    n = asort(arr)
  36.    if (n == 0)
  37.        exit
  38.    else if (n == 1) {
  39.        print arr[1]
  40.        exit
  41.    }    
  42.    res = 0
  43.    if (n % 2 == 0)
  44.        res = arr[n/2]
  45.    else
  46.        res = (arr[int(n/2)] + arr[int(n/2) + 1]) / 2.0
  47.    gsub(/ /, "", res)
  48.    print res
  49. }    
  50. ' "$1"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement