주어진 파일에 대한 데이터 합계를 추출하여 다른 파일에 인쇄하는 두 개의 코드가 있는 스크립트가 있습니다. 두 번째 코드는 누락된 데이터 포인트의 합계를 다른 파일로 추출합니다. 마지막으로 두 개의 출력 파일이 세 번째 파일에 통합됩니다. 세 가지 코드는 모두 개별적으로 실행될 때 작동합니다. 처리해야 할 파일의 양이 많기 때문에 하나의 스크립트 파일로 자동화하려고 합니다. bash 쉘을 실행하십시오. Colavg.sh 파일에 실행 권한이 부여되었습니다. 이것을 단일 스크립트로 실행하려고 하면 다음 오류가 발생합니다.
awk: cmd. line:1: ./Colavg.sh
awk: cmd. line:1: ^ syntax error
awk: cmd. line:1: ./Colavg.sh
awk: cmd. line:1: ^ unterminated regexp
#!/bin/awk
awk -F ',' 'NF==4{count++} END {print "missing: "count}' County029-CO-0023-T0000JD.out > avg.out;
awk -F ',' '$4==-999{c999++}; END{print "missing: "c999}' County029-CO-0023-T0000JD.out > avg1.out;
cat avg1.out avg.out >> County029-CO-0023-T0000JD-avg.out
답변1
문제는 스크립트의 #!
-line입니다. 스크립트 #!/bin/sh
가 아닌 쉘 스크립트 여야 합니다 awk
.
여기서 실제로 일어나는 일은 오류 줄이 있는 쉘이 #!
실행된다는 것입니다.
/bin/awk ./Colavg.sh
이는 텍스트 문자열을 프로그램 ./Colavg.sh
으로 사용하는 것을 의미합니다 awk
. 프로그램 으로서 awk
이것은 말이 되지 않습니다. awk
통역사는 종료하기로 결정하기 전에 두 가지 별도의 오류를 인식할 것입니다.
스크립트는 다음과 같이 단순화될 수 있습니다.
#!/bin/sh
name=County029-CO-0023-T0000JD
awk -F , '
$4 == -999 { c999++ }
NF == 4 { count++ }
END { printf "missing: %d\n", c999 }
END { printf "missing: %d\n", count }' "$name.out" >>"$name-avg.out"
결과를 출력 파일에 쓰기 전에 출력 파일을 자르려면(비우려면) >>
끝에 로 변경하십시오.>