我有一个这样布局的文件
gender,yearsExperience,yearsSchool,wage
female,9,13,6.3152956461
female,12,12,5.4797699786
female,11,11,3.6421699174
female,9,14,4.5933365997
female,8,14,2.4181574607
我试图找出高中毕业生和大学毕业生(12/16 年级学校)赚取的最低工资之间的差异。我有一个shell脚本编写如下:
#High School Min
HighSchoolMin=$(cat wages.csv | cut -d "," -f 3,4 | egrep "^[1]{1}[2]{1}," | tr , " " | sort -k2,2r | tail -n 1 | cut -d " " -f 2)
#College Min
CollegeMin=$(cat wages.csv | cut -d "," -f 3,4 | egrep "^[1]{1}[6]{1}," | tr , " " | sort -k2,2r | tail -n 1 | cut -d " " -f 2)
Difference=$($CollegeMin-$HighSchoolMin | bc)
echo The difference in minimum wages between high school and college graduates is $Difference.
当我bash this.script
得到line 13: 10.128063739-0.1028907398: command not found
我认为这是因为变量被视为字符串而不是数值。我已经尝试过,declare -i
但由于小数位的原因,这不起作用,我需要一个确切的答案。
有谁知道有什么解决方法吗?我是否走在正确的轨道上,或者我的处理方式是否存在根本问题?
答案1
shell 脚本根本没有数值变量,所以这不是问题。错误消息 100% 正确 10.128063739-0.1028907398 不是命令,您需要一个命令来创建发送到 bc 的输出。
尝试:
Difference=$(echo "$CollegeMin-$HighSchoolMin" | bc)
反而
答案2
我看到@davolfman 有你需要的答案。
仅供参考,您可以使用带有工资捕获组的正则表达式来优化高中毕业生(12 年级)和大学毕业生(16 年级)工资的检索:
sed 's/^[^,]*,[^,]*,12,\(.*\)/\1/;t;d' wages.csv # High School Grad Wages
sed 's/^[^,]*,[^,]*,16,\(.*\)/\1/;t;d' wages.csv # College Grad Wages
以下是 HighSchoolMin 和 CollegeMin 的更新脚本:
HighSchoolMin=$(sed 's/^[^,]*,[^,]*,12,\(.*\)/\1/;t;d' wages.csv | sort -n | head -1)
CollegeMin=$(sed 's/^[^,]*,[^,]*,16,\(.*\)/\1/;t;d' wages.csv |sort -n | head -1)