이렇게 정리된 파일이 있어요
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학년)의 최저임금 차이를 구하려고 합니다. 다음과 같이 작성된 쉘 스크립트가 있습니다.
#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
쉘 스크립트에는 숫자 변수가 전혀 없으므로 문제가 되지 않습니다. 오류 메시지는 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)