基于行计数循环Python脚本

时间:2013-08-27 04:05:08

标签: python bash loops

我有一个python脚本,它基本上可以对文件执行某些操作并生成较短的文件。我希望脚本继续在每个后续输出文件上运行,直到输出文件和最新的输入文件具有相同的行数。

python脚本的工作原理如下:

python Joiner.py input.txt output.txt

我想创建一个运行类似这样的BASH脚本:

while [outputfilelines -lt inputfilelines]
do

python Joiner.py inputfile.txt outputfile.txt

done

然后每个输出文件成为下一个循环的输入文件。我尝试了一些不同的东西,但我似乎无法让它正常工作。我无法弄清楚如何将一个文件保留在循环中并吐出另一个文件。

非常感谢任何帮助。

感谢。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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 ]测试(它是重要的考验)。如果计数不同,则将新计数记录为旧计数并重复。没有多少人知道你可以在shell while循环的条件部分中运行这样的多个命令。

答案 2 :(得分:0)

如果内容也相同,则可以使用diff:

while ! diff "$IN" "$OUT"; do
    python Joiner.py "$IN" "$OUT"
    mv "$OUT" "$IN"
done