사용자 정의 출력 문을 위한 Bash 수정 코드

사용자 정의 출력 문을 위한 Bash 수정 코드

스크립트는 사용자 입력 파일의 내용을 읽고 특정 작업에 종사하는 직원 수를 계산합니다. 프론트 파일 라인:

Sophia Lewis, 542467, Accountant 

지금까지 내 스크립트는 다음과 같습니다

if [ -s $1 ]
then

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

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

fi

산출:

4 Sales 
2 Accountant 
1 CEO 

하지만 출력이 다음과 같이 표시되기를 원합니다.

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

고양이를 꺼내서 각 줄을 사용자 정의할 수 있도록 에코 문을 넣어야 할까요? "is/is" x 직원이어야 하는지 알 수 있는 방법이 있나요?

답변1

쉘이 bash 버전 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

아니면 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"

관련 정보