5000 万行のファイルがあり、そこから 1000 行をランダムに抽出する必要があります。
まず、1000 個の乱数を作成します。それから私は使用します
sed -n "$random{p;q}" file
それは本当に遅いです; 1 行の出力には少なくとも 5 ~ 6 秒かかります。
したがって、印刷固有の回線速度を最適化する必要があると思います。
特定の行を印刷する方法はたくさんあります。
sed -n "$line{p;q}" file
awk "NR==$line{print}" file
head -$line file | tail -1
それはすべて遅いです...特定の行を印刷するのに約5〜6秒かかります。
シェルで特定の行を印刷する他の方法はありますか?または、python、perlはシェルよりも高速ですか? または、この問題を解決する私の方法が間違っていますか?
- - - - - - - - - - - - - - - - - - - - スプリット - - - - - --------------------------------------
1000回の乱数を反復し、毎回シェルを1回使用すると、1000回のio操作が生成される可能性があります。最初に乱数を保存し、ファイルを1回反復するために配列を使用する必要があるかもしれません。
random_array=()
awk '{if ( NR in $random_array ) print;}' file
さて、私はこの方法でテストし、後で結果を貼り付けます