2013-05-30 5 views
2

2 개의 개별 파일 lostType.txt (선택한 옵션 표시) 및 lost.txt (메모리 누수 표시) dialog을 사용하여 GUI를 만듭니다. 확인란을 사용하여 사용자가 인쇄 할 메모리 누수를 제한하기 위해 숫자 간격을 사용하고 있습니다. 사용자가 definetely 손실보고 싶어하면 내가, 어느 메모리 누수가 선택한 크기에 선을 인쇄하면됩니다 및 유형을 누설 할 것은 lostType.txt에awk에서 파일을 검색하는 방법

예를 들어,이 lost.txt

LEAK SUMMARY 
100 bytes definitely lost 
0 bytes indirectly lost 
0 bytes possibly lost 
100 bytes still reachable 
0 bytes suppressed 

입니다 그리고 간접 손실, lostType.txt 크기는 0과 10 바이트 또는 100 바이트 및 250 사이에 누수를 참조 선택된 다음

definetely 
indirectly 

한다고 가정 사용자를 갖는다. 이제 출력 100 bytes in 1 blocks definitely lost 내가 지금까지했던 다음은 무엇

선택된 크기 간격에 따라입니다
for choice in $choices 
do 
    case $choice in 
    1) 
     #"Memory Leak <= 10 Byte" 
     cat lost.txt | awk '{ 
      if ($1 <= 10 && $1 > 0) 
       print $1,$2" ==>",$3,$4  
      }' 
     ;; 

    2) 
     #"10 Byte < Memory Leak <= 50 Byte" 
     cat lost.txt | awk '{ 
      if ($1 <= 50 && $1 > 10) 
       print $1,$2" ==>",$3,$4  
      }' 
     ;; 

, 내가 값을 인쇄 할 수 있어야합니다. 그러나 lostType (상위 코드에 대해 $ 3)을 찾는 방법을 찾지 못했습니다. 내가 뭘해야 어떻게 AWK 내부 파일을 검색 할 수 있습니다

cat lost.txt | awk '{ 
if ($1 <= 50 && $1 > 10 AND IF $3 IS IN lostType.txt) 
     print $1,$2" ==>",$3,$4 
}' 
;; 

그래서 내 질문은

같은 AWK에서 파일을 검색입니까?

+0

Pls는. 'cat 파일 | awk ... '. 'awk ... file'을 대신 사용하십시오. – TrueY

답변

1

질문을 이해하면 다음 awk 명령을 사용해야합니다. 두 입력 파일을 제공해야합니다. 손실 된 유형은 해시에 저장되고 키를 다른 키의 세 번째 필드와 비교합니다.

awk ' 
    FNR == NR { type[ $1 ] = 1; next } 
    $1 > 10 && $1 < 200 && type[ $3 ] { print $1,$2 " ==> " $3,$4 } 
' lostType.txt lost.txt 

그러나 이렇게하면 case 옵션을 모두 구문 분석 할 수 있습니다. 제 생각에는 이러한 변수를 awk 명령에 전달하고 한 번만 실행하는 것이 더 좋은 해결책입니다.

case $choice in 
1) 
    limit_inf=0 
    limit_sup=10 
    break 
    ;; 
2) 
    limit_inf=10 
    limit_sup=50 
    break 
    ;; 
... 

: 그리고

awk -v li="$limit_inf" -v ls="$limit_sup" ' 
    FNR == NR { type[ $1 ] = 1; next } 
    $1 > li && $1 < ls && type[ $3 ] { print $1,$2 " ==> " $3,$4 } 
' lostType.txt lost.txt 
관련 문제