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