Bash
將 shell 腳本中的變數從字元串轉換為數字
我有一個像這樣佈置的文件
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
了,但由於小數位,這不起作用,我需要一個準確的答案。有誰知道任何解決方法?我是在正確的軌道上,還是我如何處理這個問題只是一個基本問題?
Shell 腳本根本沒有數值變數,所以這不是問題。錯誤消息 100% 正確 10.128063739-0.1028907398 不是命令,您需要一個命令來創建輸出以發送到 bc。
嘗試:
Difference=$(echo "$CollegeMin-$HighSchoolMin" | bc)
反而
我看到@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)