2012-12-13 2 views
2

나는 다음과 같은 스크립트가 : 나는 예제로 URL http://www.thegeekstuff.com/2010/02/awk-conditional-statements/CSH AWK 구문 오류의 경우 다른 코드

에서 직접 복사

#!/bin/csh 
echo "jones 2143 78 84 77" >! student-marks 
echo "Gondrol 2243 88 94 87" >> student-marks 

awk '{ 
if ($3 >=35 && $4 >= 35 && $5 >= 35) 
    print $0,"=>","Pass"; 
else 
    print $0,"=>","Fail"; 
}' student-marks 

사용하는 방법을 배울 수를 경우 AWK와 다른 논리 . 불행하게도 계속 오류가 발생합니다. ' 조언이 있습니까?

+0

는 다음과 같이 답변을 참조하십시오. 'awk'를 조금 더 어색하게 만들 수 있습니다 : awk '$ 3> = 35 && $ 4> = 35 && $ 5> = 35 {print $ 0, "=>", "Pass"; 다음} {인쇄 $ 0, "=>", "실패"} '파일'. 기본적으로 유죄입니다. – Steve

+1

'awk'{print $ 0, "=>", ($ 3> = 35 && $ 4> = 35 && $ 5> = 35)를 사용하여 awk one-liner로 변환 할 수 있습니까? "합격": "실패") '학생 표장' –

답변

2

csh에서 sh 또는 bash으로 변경하십시오.

#!/bin/sh 
... 

Csh는 Posix 쉘과 같은 방식으로 여러 줄로 묶인 인용 문자열을 처리하지 않습니다.

2

DigitalRoss csh가 여러 줄의 인용 문자열을 POSIX 셸과 다르게 처리하고 sh 또는 bash을 사용하는 것이 쉽습니다. csh은 일반적으로 스크립팅에 적합하지 않은 것으로 간주됩니다 (대화식 사용의 경우 일부는 특히 tcsh 변형).

csh을 스크립팅에 사용하는 데 따른 문제점에 대한 설명은 "Csh Programming Considered Harmful"을 참조하십시오.

그러나 csh를 사용하여 원하는대로 할 수 있습니다. 당신은 멀티 라인 인용 문자열 내의 각 행의 끝에 백 슬래시를 추가해야합니다

#!/bin/csh -f 
echo "jones 2143 78 84 77" >! student-marks 
echo "Gondrol 2243 88 94 87" >> student-marks 

awk '{\ 
if ($3 >=35 && $4 >= 35 && $5 >= 35)\ 
    print $0,"=>","Pass";\ 
else\ 
    print $0,"=>","Fail";\ 
}' student-marks 

출력 : 내가 한 번 더 작은 변화에 몰래 한

jones 2143 78 84 77 => Pass 
Gondrol 2243 88 94 87 => Pass 

다음 -f 추가 옵션을 #! 행에 추가하십시오. 이렇게하면 csh에 리소스 또는 시작 파일이로드되지 않으므로 스크립트 (a)가 조금 더 빨리 시작하고 (b) 자신의 .cshrc.login 파일에 실수로 인한 종속성이 발생하지 않습니다. (이 하지shbash 스크립트에 적용하지, 그 조개를 들어, -f 옵션은 완전히 다른 의미를 갖습니다.)