2017-01-10 1 views
-4

한 줄씩 파일을 읽으려면 while 루프를 작성했습니다.유닉스 while 루프 오랜 시간이 걸릴

while read file 
do 
    FileFound="`find $DataDir -name $file -print 2>/dev/null`" 
    if [ -n "$FileFound" ]; then 
    echo $FileFound >> ${runDir}/st_$Region 
    else 
    echo $file >> ${APP_HOME}/${Region}_filesnotfound_$date.txt 
    fi 
done < ${Region}_${date}.txt 

8000 레코드의 경우 완료하는 데 거의 2 일이 걸렸습니다. 어떻게 최적화합니까?

+3

[둘러보기] (https://stackoverflow.com/tour)를 읽은 다음 [How To Ask] (https://stackoverflow.com/help/how-to-ask)를 읽으십시오. 귀하의 질문은 주제에 벗어났습니다. [Code Review] (https://codereview.stackexchange.com/)를 찾고 계십니까? –

+1

유닉스는 프로그래밍 언어가 아닙니다. –

답변

2

루프가 시간이 걸리는 이유는 각각의 파일에 대해 find 8000 번 실행되기 때문입니다! 그건 정말 비싸다. $ DataDir 아래의 모든 파일에 대해 하나의 find을 실행하여 파일에 저장 한 다음 파일을 조회하는 데 사용할 수 있습니다. 그것은 당신의 루프를 극적으로 가속화 할 것입니다.

관련 문제