我有以下平面文件 employees.txt
100 Thomas Manager Sales $5,000
200 Jason Developer Technology $5,500
300 Sanjay Sysadmin Technology $7,000
400 Nisha Manager Marketing $9,500
500 Randy DBA Technology $6,000
我想统计每个部门的人数。我知道有更短的方法可以使用 awk '{print $4}' employees.txt | sort | uniq -c
之类的命令来执行此操作但我想学习 while 循环的机制,逐行读取输入
#!/bin/bash
awk '{print $4}' employees.txt > temp_file
array=[]
while read line
do
if [[ $array[$line] ]]
then
$array[$line]=$(($array[$line]+1))
else
$array[$line]=0
fi
done < temp_file
当我运行此脚本时,出现错误 ./process.sh: line 9: [][Sales]+1: syntax error: operand expected (error token is "[][Sales]+1")
此外 - 在 done
之后是否有我可以使用的语法?关键字来获取第四列中的条目?我试过 done < awk '{print $4}' employees.txt
但这是不正确的。
此外 - 有没有办法存储 awk '{print $4}' employees.txt > temp_file
的输出?在变量而不是临时文件中?
最佳答案
#!/bin/bash
awk '{print $4}' employees.txt > temp_file
declare -A array
while read line
do
if [[ ${array["$line"]} ]]; then
array["$line"]=$(( ${array["$line"]} + 1 ))
else
array["$line"]=1
fi
done < temp_file
for k in "${!array[@]}"; do
echo "$k ${array[$k]}"
done
关于linux - 如何计算平面文件的单个列中每个术语的出现次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15317813/