1

我有一个 python 脚本,它基本上在一个文件上做了一些事情并导致一个更短的文件。我希望脚本继续在每个后续输出文件上运行,直到输出文件和最近的输入文件具有相同的行数。

python 脚本的工作方式如下:

python Joiner.py input.txt output.txt

我想创建一个将运行如下内容的 BASH 脚本:

while [outputfilelines -lt inputfilelines]
do

python Joiner.py inputfile.txt outputfile.txt

done

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

任何帮助将不胜感激。

谢谢。

4

3 回答 3

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
于 2013-08-27T04:13:51.830 回答
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 ]控制循环的测试(它是计数的测试)。如果计数不同,则将新计数记录为旧计数并重复。没有多少人知道您可以在 shellwhile循环的条件部分运行多个这样的命令。

于 2013-08-27T04:15:12.253 回答
0

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

while ! diff "$IN" "$OUT"; do
    python Joiner.py "$IN" "$OUT"
    mv "$OUT" "$IN"
done
于 2013-08-27T04:18:39.940 回答