我有一个 8 GB 的 txt 文件,我必须为文件中的每一行运行一个 python 脚本并保存部分输出。
有什么方法可以将其分成几个进程,以使其在 bash 中运行得更快?
下面是我当前的 bash 脚本:
#!/bin/bash
filename='before.txt'
while read p; do
python py-hex.py $p | sed -n -e '/^qter/p' | sed 's/qter: //g' >> converted.txt
done < $filename
答案1
我认为您需要提供有关限制的更多细节 - 例如,converted.txt 中的输出是否需要与“before.txt”的顺序相同,每次解析 python 脚本需要多长时间?如果输出顺序不取决于输入,您可以通过后台进程并在每个循环中启动多个进程来做到这一点 - 我猜这个数字取决于您的 CPU 将处理多少个线程。
以下内容可能(或可能不)适合您的目的:
#! /bin/bash
threads=4;
threads=$(( $threads - 1))
while read filein
do
python py-hex.py $filein | sed -n -e '/^qter/p' | sed 's/qter: //g' >> converted.txt &
for thread in `seq $threads`
do
read filein
python py-hex.py $filein | sed -n -e '/^qter/p' | sed 's/qter: //g' >> converted.txt &
done
done < $filename
注意:这假设你的 python 文件可以处理空输入(即,如果命令的数量不能被线程数完全整除,那么就会有一些空行 - 你可以在执行内部循环之前始终对此进行检查。
该脚本假设您不关心输出顺序。