# plik receptury: func_split

#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Podzał danych wejściowych na bloki o jednakowym rozmiarze - TYLKO jeśli
# ilość danych wejściowych przekracza określoną wartość
# Wywołanie: Split <plik> <prefiks> <opcja limitu> <parametr limitu>
# np. Split $dane ${dane}_ --lines 100
# Informacje na temat opcji są zamieszczone w podręczniku systemowym
# dla instrukcji split i wc

function Split {
    local file=$1
    local prefix=$2
    local limit_type=$3
    local limit_size=$4
    local wc_option

    # Sprawdzenie poprawności parametrów
    if [ -z "$file" ]; then
        printf "%b" "Split: brak nazwy pliku!\n"
        return 1
    fi
    if [ -z "$prefix" ]; then
        printf "%b" "Split: brak prefiksu pliku wyjściowego!\n"
        return 1
    fi
    if [ -z "$limit_type" ]; then
        printf "%b" "Split: brak opcji limitu (np. --lines), zobacz 'man split'!\n"
        return 1
    fi
    if [ -z "$limit_size" ]; then
        printf "%b" "Split: brak wielkości limitu (np. 100), zobacz 'man split'!\n"
        return 1
    fi

    # Przekształcenie opcji polecenia split w opcje instrukcji wc
    # W niektórych systemach pewne opcje instrukcji wc i split nie są obsługiwane
    case $limit_type in
        -b|--bytes)      wc_option='-c';;
        -C|--line-bytes) wc_option='-L';;
        -l|--lines)      wc_option='-l';;
    esac

    # Jeżeli którykolwiek z limitów został przekroczony
    if [ "$(wc $wc_option $file | awk '{print $1}')" -gt $limit_size ]; then
        # wykonanie zasadniczego zadania
        split --verbose $limit_type $limit_size $file $prefix
    fi
} # koniec funkcji Split
