2013-11-21 5 views
0

에서 첫 번째 레코드로 라인을 AWK는-인쇄. 이 특정 스크립트는 오류를 오류 로그에 출력합니다. , 스크립트는 로그 파일에있는 출력 데이터를 다른 오류 처리 조건의 수를 포함출력 파일을 Heres 문제

if (blErrorCounter) { 
    print "Log contains " blErrorCounter " errors!" 
} else { 
    print "Log contains no errors!" 
} 

: 나는 오류가 발생하여 내 스크립트의 끝에 다음 제어 문이 될 때마다 증가 변수가 하지만 파일의 첫 번째 레코드로 위를 인쇄 할 수 있기를 원합니다 ...

AWK에 대한 멍청한 말이지 만, 어떤 도움이나 포인터가 크게 받아 들여지는 것처럼 간단 할 수도 있습니다.

+0

'awk' 스크립트에 여러 개의'print()'문장이 있습니다.이 코드는 마지막 부분이지만'print()'출력이 첫 번째 부분에 나타나야합니까? – Birei

답변

4

당신은 예를 들어, END 섹션에서 인쇄 오류 메시지를 저장해야합니다

/error/ { errors[++blErrorCounter] = "Got error at line " FNR } 
END { 
    if (blErrorCounter) { 
     print "Log contains", blErrorCounter, "errors!" 
     for (ec=1; ec <= blErrorCounter; ec++) { 
      print errors[ec] 
     } 
    } else { 
     print "Log contains no errors!" 
    } 
} 

당신은 쓸 수 너무 조금 짧습니다 :

/error/ { errors[++blErrorCounter] = "Got error at line " FNR } 
END { 
    print "Log contains", (blErrorCounter ? blErrorCounter : "no"), "errors!" 
    for (ec=1; ec <= blErrorCounter; ec++) { 
     print errors[ec] 
    } 
} 

심지어 "no"대신 "0"으로 살면됩니다.

/error/ { errors[++blErrorCounter] = "Got error at line " FNR } 
END { 
    printf "Log contains %d errors!\n", blErrorCounter 
    for (ec=1; ec <= blErrorCounter; ec++) { 
     print errors[ec] 
    } 
}