2014-10-22 4 views
0

awk를 사용하여 AIX powerpc 시스템에서 변수를 전달하는 bash 스크립트를 작성했습니다. & 답변을이 사이트에서 읽은 후에 작성된 코드가 올바르게 작동합니다. :)변수 및 if 문을 전달하는 bash 스크립트 awk

이제 bash 스크립트에 if 문을 추가하고 awk 구문 오류가 발생했습니다. 내 요구 사항 (아래 스크립트 참조) : - awk 패턴 일치가 true이면 $ 0을 출력하십시오. - 그렇지 않으면 "트랜잭션 : p 값을 찾을 수 없습니다."

bash-4.2$ cat trans.txt 

10291413 
8537353 
8619033 
8619065 
8625705 

trans.txt

콘텐츠 누군가가 나를 도와 줘요 수 없습니다. 고맙습니다. getDetail.sh의

내용

#!/usr/bin/bash 

sysDir="/var/syslog-ng/TEST/STS" 
syslogFile="DPSTSLog2014-10-22T09.log" 
pattern="Latency" 

filename=$1 
while read f; do 
    concatPattern="$f.*$pattern" 
    awk -v p="$concatPattern" '$0 ~ p {print $0}' $sysDir/$syslogFile 
done < $filename 

실행 명령 실행

./getDetails.sh trans.txt 

아래 결과

2014-10-22T09:15:53+11:00,10.16.198.50,info,latency,[info] xmlfirewall(ws-TrustValidate): trans(10291413): Latency: 0 0 0 0 14 14 0 14 0 0 0 14 0 0 0 0 
2014-10-22T09:15:38+11:00,10.16.198.50,info,latency,[info] xmlfirewall(ws-TrustValidate): trans(8619033): Latency: 0 0 0 0 73 73 0 73 0 0 0 73 0 0 0 0 
2014-10-22T09:18:04+11:00,10.16.198.50,info,latency,[info] xmlfirewall(ws-TrustValidate): trans(8625705): Latency: 0 0 0 0 13 13 0 13 0 0 0 13 0 0 0 0 
+0

'{$ 0 인쇄''이 될 수 {$ 0 인쇄}; 다음 번에 {do other thing}' –

+0

빠른 C에 감사드립니다. 마크. 나는 그것이 예상대로 작동하지 않도록 노력했다. –

+0

'{print $ 0; 다음} {print "트랜잭션 : p 값을 찾을 수 없습니다."}' –

답변

0
awk -v p="$concatPattern" ' 
    $0 ~ p {print $0; found=1} 
    END {if (! found) print "transaction: p value not found"} 
' $sysDir/$syslogFile 
+0

나는 우리가 결국 거기에 갔다고 생각한다 :-) –

+0

대답은 나의 기대를 충족시키지 못한다. 위의 코드로 문제를 해결하고 결론을 내 렸습니다. 따라서 위에 사용 된 awk find match 문은 실제 부울 값만 실행합니다. found = 1은 일치하지 않는 경우 실행되지 않습니다. 거짓 부울 END 문은 쓸모 없게됩니다. 나는 그것을 직접 테스트했다. 내가 의미하는 바는 패턴이 일치하지 않을 때 awk이 내게 말할 수 없다는 것입니다. 단순히 아무것도하지 않습니다. –

+0

@ChristinaLiu 글렌이 요구 사항 중 약간을 변경할 수 있으므로 글렌은 '인쇄'거래 : ", p,"찾을 수 없음 "즉 더 유익한 경고를 작성할 수 있습니다. – gboffi