Bash- Ajuda modificar código para uma declaração de saída personalizada

0

O script lerá o conteúdo de um arquivo de entrada do usuário e contará o número de funcionários com um trabalho específico. Linha do arquivo ex:

Sophia Lewis, 542467, Accountant 

O script que tenho até agora é:

if [ -s $1 ]
then

cat $1 | tr -s ' ' | cut -d' ' -f4- | sort | uniq -c

else
        echo "ERROR: file '$1' does not exist."

fi

Saída:

4 Sales 
2 Accountant 
1 CEO 

Mas eu quero que a saída apareça como:

There are 4 ‘Sales’ employees. 
There are 2 ‘Accountant’ employees. 
There is 1 ‘CEO’ employee. 
There are a total of 7 employees in the company

Devo tirar o gato e colocar as instruções de eco para que eu possa personalizar cada linha? E existe uma maneira de saber se deve ser "é / são" x funcionários?

    
por Jack 21.04.2014 / 18:22

1 resposta

3

Se o seu shell é bash versão 4:

declare -i total=0
declare -A type
if [ -s "$1" ]; then
    while IFS=, read name id job; do
        [[ $job =~ ^[[:space:]]*(.+)[[:space:]]*$ ]] &&
        (( type["${BASH_REMATCH[1]}"]++, total++ ))
    done < "$1"
    for job in "${!type[@]}"; do
        printf "There are %d '%s' employees.\n" ${type["$job"]} "$job"
    done
    echo "There are a total of $total employees in the company"
else
    echo "ERROR: file '$1' does not exist or has zero size."
fi

Ou use o awk:

awk -F' *, *' '
    { type[$3]++; total++ } 
    END {
        for (job in type) 
            printf "There are %d '\''%s'\'' employees.\n", type[job], job
        print "There are a total of", total, "employees in the company"
    }
' "$1"
    
por 21.04.2014 / 19:01