2011-11-15 4 views
0

셸 스크립트로 파일을 읽고 줄 단위로 처리하려고합니다. 각 줄에서 2 개의 필드를 추출하고 싶습니다.왜 문자열을 분할 할 수 없습니까?

#!/bin/bsh 
mlist=`ls *.log.2011-11-1* | grep -v error` 
for log in $mlist 
do 
     while read line 
     do 
       echo ${line} | awk -F"/" '{print $4}' #This produce nothing 
       echo ${line}       #This work and print each line 
     done < $log | grep "java.lang.Exception" 
done 

이 입력 파일에서 샘플 라인 : 여기 내 코드는 내가 BSH를 사용하지 않는 경우, 내가 KSH을 사용할 수 있습니다

<ERROR> LimitFilter.WebContainer : 4 11-14-2011 21:56:55 - java.lang.Exception: File - /AAA/BBB/CCC/DDDDDDDD.PDF does not exist 

는, 그 결과는 동일합니다. 우리는 여기에 강타가 없다.

답변

4

while 루프의 출력을 grep "java.lang.Exception"에 전달하기 때문입니다.

echo $line | awk -F"/" '{print $4}'의 출력은 CCC입니다. grep을 통해 파이프 될 때 CCC이 검색 패턴과 일치하지 않으므로 아무 것도 인쇄되지 않습니다.

| grep "java.lang.Exception"을 제거하려고하면 루프 출력이 올바르게 출력됩니다.

대신 while 루프를 제거 할 수 있습니다 취할 수있는 다른 방법은 사용

grep "java.lang.Exception" $log | awk -F"/" '{print $4}' 
+0

IC는 ... 내가 GREP에 의한 입력을 처리 한 생각했다. grep에 의해 처리되는 출력을 결코 알지 못합니다. – lamwaiman1988

관련 문제