semを使用してforループでシェルコマンドを並列に実行するには?

semを使用してforループでシェルコマンドを並列に実行するには?

これは私には何もスピードを上げません。

domains=()

for i in `seq 1 100`; do
    echo $i
    word=`sem "xidel -s 'https://www.thisworddoesnotexist.com/' -e '//div[@id="definition-word"]/text()'"`
    len=${#word}
    if [ "$len" -lt "8" ]; then
        word=`echo $word | sed 's/[^a-z A-Z]//g'`
        domains+=(${word}.com)
    fi
done
sem --wait

printf '%s\n' "${domains[@]}"

forループ本体を並列に実行しようとしていますsem

ベストアンサー1

あなたが探しているものparset

myfunc() {
    word=$(xidel -s 'https://www.thisworddoesnotexist.com/' -e '//div[@id="definition-word"]/text()')
    len=${#word}
    if [ "$len" -lt "8" ]; then
        word=`echo $word | sed 's/[^a-z A-Z]//g'`
        echo ${word}.com
    fi
}
export -f myfunc

parset domains -j 30 myfunc ::: {1..100}
printf '%s\n' "${domains[@]}"

parsetGNU Parallelの一部です。

おすすめ記事