2013-05-31 3 views
0

한다고 가정 나는 일이 원하는 스크립트를 비난하는 잣대 완전히 새로운 해요하지만구문 분석 배쉬 명령 출력

find (물건) | wc -l

그리고 내가 가지고있는 출력

14 file1.txt 
29 file2.txt 
32 file3.txt 
1 tile4.txt 

처럼 사용 다른 파일에 쓰는 명령 다음에이 출력을 바로 사용할 수 있다는 것입니다. 예를 들어 개수가 10보다 큰 경우 "ALERT! Count for file#.txt is greater than 10!"myotherfile.txt에 입력하고 싶습니다. 어떤 도움

답변

2
find ... -exec wc -l {} + | 
while read count file 
do 
    if [ $count -gt 10 ] 
    then echo "ALERT! Count for $file is $count" >>myotherfile.txt 
    fi 
done 

잔류 문제는 파이프 라인에서 버퍼링을위한

감사합니다; 그것을 막을 수있는 쉬운 방법이 없습니다. >> myotherfile.txt을 사용하면 부분적으로이를 해결할 수 있습니다. 어떤면에서 루프 전체에서 리디렉션을 사용하는 것이 더 간단 할 것이지만 (done > myotherfile.txt, >> 리디렉션 없음), 더 많은 버퍼링이있을 것입니다.

주 당신의 제안 파이프 라인 :

find ... | wc -l 

각 파일의 라인을 계산하지 않습니다; find 명령으로 생성 된 행 수만 계산합니다.

0

awk 트릭을 수행 할 수 있습니다.

find [some stuff] | wc -l | awk '$1 > 10 {print "ALERT! Count for " $2 " is greater than 10!"}' > myotherfile.txt 

명령을 실행할 때마다 myotherfile.txt을 덮어 쓰게됩니다. 행을 실행할 때마다 파일의 끝에 행을 추가하려면 > 대신 >>을 사용하십시오.