テキストファイルを固定ワード数の行に分割する

テキストファイルを固定ワード数の行に分割する

関連がありますが、満足のいく答えはありません。大容量のテキストファイルを約500語単位に分割する方法は?

テキストファイルを取得しようとしています(http://mattmahoney.net/dc/text8.zip)10 ^ 7個以上の単語を1行にすべて入れ、N単語を含む行に分割します。現在のアプローチはうまくいきますが、やや遅くて不快です(シェルスクリプトを使用)。

i=0
for word in $(sed -e 's/\s\+/\n/g' input.txt)
do
    echo -n "${word} " > output.txt
    let "i=i+1"

    if [ "$i" -eq "1000" ]
    then
        echo > output.txt
        let "i=0"
    fi
done

より速く、よりコンパクトにする方法についてのヒントはありますか?

ベストアンサー1

使用xargs(17秒):

xargs -n1000 <file >output

-n最大引数数を定義するフラグを使用します。必要な制限にxargs変更するだけです。1000500

10 ^ 7の単語を含むテストファイルを作成しました。

$ wc -w file
10000000 file

時間統計は次のとおりです。

$ time xargs -n1000 <file >output
real    0m16.677s
user    0m1.084s
sys     0m0.744s

おすすめ記事