это примерно http://en.wikipedia.org/wiki/Parallel_(software) и очень богатая справочная страница http://www.gnu.org/software/parallel/man.html
(for x in `cat list` ; do
do_something $x
done) | process_output
заменено этим
cat list | parallel do_something | process_output
Я пытаюсь реализовать это на этом
while [ "$n" -gt 0 ]
do
percentage=${"scale=2;(100-(($n / $end) * 100))"|bc -l}}
#get url from line specified by n from file done1
nextUrls=`sed -n "${n}p" < done1`
echo -ne "${percentage}% $n / $end urls saved going to line 1. current: $nextUrls\r"
# function that gets links from the url
getlinks $nextUrls
#save n
echo $n > currentLine
let "n--"
let "end=`cat done1 |wc -l`"
done
при чтении документации для параллельной GNU
я обнаружил, что функции не поддерживаются, поэтому getlink не будет использоваться параллельно
лучшее, что я нашел до сих пор -
seq 30 | parallel -n 4 --colsep ' ' echo {1} {2} {3} {4}
выводит
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
17 18 19 20
21 22 23 24
25 26 27 28
29 30
, в то время как упомянутый выше цикл должен идти следующим образом, если я прав
end=`cat done1 |wc -l`
seq $end -1 1 | parallel -j+4 -k
#(all exept getlinks function goes here, but idk how? )|
# everytime it finishes do
getlinks $nextUrls
Спасибо за помощь заранее