2013-08-27 3 views
1

기본적으로 파일에 몇 가지 작업을 수행하고 파일 길이가 더 짧은 python 스크립트가 있습니다. 출력 파일과 가장 최근 입력 파일의 줄 수가 같을 때까지 각 후속 출력 파일에서 스크립트를 계속 실행시키고 싶습니다.행 개수에 따라 Python 스크립트 반복하기

는 파이썬 스크립트는 다음과 같이 작동

while [outputfilelines -lt inputfilelines] 
do 

python Joiner.py inputfile.txt outputfile.txt 

done 

각 출력 파일은 다음의 입력 파일이됩니다 :

python Joiner.py input.txt output.txt 

나는 이런 식으로 뭔가를 실행하는 BASH 스크립트를 만들려면 다음 루프. 몇 가지 시도를했지만 올바르게 작동하지는 않습니다. 나는 하나의 파일을 루프에 보관하고 다른 파일을 빠져 나가는 방법을 알아낼 수 없다.

도움을 주시면 감사하겠습니다.

감사합니다.

답변

0

이 거의 폭력과 무지는 다음과 같습니다

I_FILE="input.txt" 
O_FILE="output.txt" 

old=$(wc -l <"$I_FILE") 
while python Joiner.py "$I_FILE" "$O_FILE" 
     new=$(wc -l < "$O_FILE") 
     mv "$O_FILE" "$I_FILE" 
     [ $new != $old ] 
do 
    old=$new 
done 

while 조건이 네 개의 명령 평가 - python 명령의 new= 라인 카운트 할당, 이동 명령과를 제어하는 ​​[ $new != $old ] 테스트를 루프 (카운트하는 테스트)입니다. 카운트가 다른 경우, 새 카운트를 이전 카운트로 기록하고 반복하십시오. 많은 사람들이 쉘 while 루프의 조건 부분에서 이와 같이 여러 명령을 실행할 수 있다는 것을 알고 있습니다. 내용도 동일 될 경우

1
IN=input.txt 
OUT=output.txt 

touch $OUT 
while [ ! $(wc -l < $IN) -eq $(wc -l < $OUT) ]; do 
     python Joiner.py $IN $OUT 
     mv $OUT $IN 
done 
+0

왜 그냥 화장실 -l $? – Owen

+0

왜'wc -l <$ IN'이 아닌가? 'wc -l $ IN' (I/O 리디렉션없이)을 사용하지 않는 이유는'wc'가 파일 이름을 출력에 포함시키기 때문입니다. 입력 리디렉션을 사용하면 파일 이름이 생략됩니다. 'cat'은 [UUOC] (http://partmaps.org/era/unix/award.html)입니다.'cat'을 쓸모 없게 사용합니다. 또한 '터치 아웃'하는 이유는 무엇입니까? 그게 '터치 $'해야합니까? '! a-eq b 표기법은'a -ne b'보다 더 복잡합니다. –

+0

감사합니다. @JonathanLeffler. -ne을 사용하지 않는 이유는 결코 그것을 배운 적이 없다는 것입니다! x -eq y는 저에게 자연스러운 것입니다. – yaccz

0

, 당신이 사랑하는를 사용할 수 있습니다

while ! diff "$IN" "$OUT"; do 
    python Joiner.py "$IN" "$OUT" 
    mv "$OUT" "$IN" 
done 
관련 문제