AWK

2017-11-01 10 views
1

내가 awk 명령 아래 사용하여 파일에서 특정 패턴의 수를 발견하고에 정규식을 맞추어 인쇄 라인을 방지하는 방법 :AWK

awk -F" " ' 
    seconds[$3]=1; 
    /\[[a-z_]*\] start/{start[$3]++} 
    /\[[a-z_]*\] end/{end[$3]++;sumresptime[$3]+=substr($(NF-1),2)} 

END { 
    num = asorti(seconds, indices); 
    for (i=1;i<=num;i++) 
    { 
      requests = start[indices[i]] > 0 ? start[indices[i]] : 0; 
      responses = end[indices[i]] > 0 ? end[indices[i]] : 0; 
      avgresptime = end[indices[i]] > 0 ? sumresptime[indices[i]]/end[indices[i]] : 0; 

      print indices[i]" "requests"|"responses"|"avgresptime" 
    } 
}' $logfile 

문제는 일치하는 모든 라인을 인쇄하는 점이다 정규식은 계산을 위해 사용합니다. 콘솔에서 라인 인쇄를 피하는 방법은 무엇입니까?

답변

1

당신은 "직접"평가를 방지하기 위해 대괄호 {}에 첫 번째 표현식 seconds[$3]=1;를 동봉해야합니다

'{ seconds[$3]=1 }' 
게다가

, 만약 "임의의"공백으로 구분하여 입력 파일의 모든 필드, 지정할 필요가 없습니다 -F" " - awk은 자동으로 공백으로 구분됩니다 (기본값)