1. Inicio
  2. Tecnologia
  3. Bash
  4. Libreria de Funciones

Libreria de Funciones de uso general

Encontrar el valor mínimo en un arreglo

function min() {
    local array=("$@")
    local min=${array[0]}

    for n in ${array[@]}; do
        if [[ n -lt $min ]]; then
            min=$n
        fi
    done

    echo $min
}

Ejemplo

#!/usr/bin/env bash 

function min() {
    local array=("$@")
    local min=${array[0]}

    for n in ${array[@]}; do
        if [[ n -lt $min ]]; then
            min=$n
        fi
    done

    echo $min
}

array=(1 2 2 4 1 5)

min=$(min ${array[@]})

echo "El valor mínimo en [${array[@]}] es $min"

El valor mínimo en [1 2 2 4 1 5] es 1

Encontrar el valor máximo en un arreglo

function max() {
    local array=("$@")
    local max=${array[0]}

    for n in ${array[@]}; do
        if [[ n -gt $max ]]; then
            max=$n
        fi
    done

    echo $max
}

Ejemplo

 #!/usr/bin/env bash 

function max() {
    local array=("$@")
    local max=${array[0]}

    for n in ${array[@]}; do
        if [[ n -gt $max ]]; then
            max=$n
        fi
    done

    echo $max
}

array=(1 2 2 4 1 5)

max=$(max ${array[@]})

echo "El valor maximo en [${array[@]}] es $max"

El valor maximo en [1 2 2 4 1 5] es 5

Calcular la frecuencia de los valores de un arreglo

function frequency() {
    local array=("$@")
    declare -A local frequency

    for i in ${array[@]}; do
        temp=${frequencyf[$i]}
        ((temp++))
        frequencyf[$i]=$temp
    done

    echo "${frequencyf[@]@K}"
}

Ejemplo

#!/usr/bin/env bash 

function frequency() {
    local array=("$@")
    declare -A local frequency

    for i in ${array[@]}; do
        temp=${frequencyf[$i]}
        ((temp++))
        frequencyf[$i]=$temp
    done

    echo "${frequencyf[@]@K}"
}


array=(1 2 2 4 1 5)

declare -A frecuencia="($(frequency "${array[@]}"))"

for key in ${!frecuencia[@]}; do
    echo Frecuencia de $key = ${frecuencia[$key]}
done

Frecuencia de 5 = 1
Frecuencia de 4 = 1
Frecuencia de 2 = 2
Frecuencia de 1 = 2

Obtener los valores únicos de un arreglo

function uniq() {
    local array=("$@")
    declare -A local temp
    local unique=()

    for n in ${array[@]}; do
        ((temp[$n]++))
    done

    for i in ${!array[@]}; do
        key=${array[$i]}
        if [ -n "${temp[$key]}" ]; then
            unique+=($key)
            unset temp[$key]
        fi
    done

    echo ${unique[@]}
}

Ejemplo

#!/usr/bin/env bash 

function uniq() {
    local array=("$@")
    declare -A local temp
    local unique=()

    for n in ${array[@]}; do
        ((temp[$n]++))
    done

    for i in ${!array[@]}; do
        key=${array[$i]}
        if [ -n "${temp[$key]}" ]; then
            unique+=($key)
            unset temp[$key]
        fi
    done

    echo ${unique[@]}
}

array=(1 2 2 4 1 5)

unicos=($(uniq ${array[@]}))

echo "Valores originales = ${array[@]}" 
echo "Valores únicos = ${unicos[@]}" 

Valores originales = 1 2 2 4 1 5
Valores únicos     = 1 2 4 5

Obtener los valores que no se repiten en un arreglo

function singleton() {
    local array=("$@")
    declare -A local temp
    local single=()

    for n in ${array[@]}; do
        ((temp[$n]++))
    done

    for i in ${!array[@]}; do
        key=${array[$i]}
        if [ ${temp[$key]} -eq 1 ]; then
            single+=($key)
            unset temp[$key]
        fi
    done

    echo ${single[@]}
}

Ejemplo

#!/usr/bin/env bash 

function singleton() {
    local array=("$@")
    declare -A local temp
    local single=()

    for n in ${array[@]}; do
        ((temp[$n]++))
    done

    for i in ${!array[@]}; do
        key=${array[$i]}
        if [ ${temp[$key]} -eq 1 ]; then
            single+=($key)
            unset temp[$key]
        fi
    done

    echo ${single[@]}
}

array=(1 2 2 4 1 5)

no_repetidos=($(singleton ${array[@]}))

echo "Valores originales  = ${array[@]}" 
echo "Valores sin repetir = ${no_repetidos[@]}" 

Valores originales  = 1 2 2 4 1 5
Valores sin repetir = 4 5