1

かなり大きなファイル (10 文字で 1 億 5000 万行) があります。これを 200 万行の 150 個のファイルに分割する必要があります。各出力行は、ソース行の最初の 5 文字または最後の 5 文字になります。これは Perl でかなり迅速に行うことができましたが、bash を使用した簡単な解決策があるかどうか疑問に思っていました。何か案は?

4

3 に答える 3

3

宿題?:-)

sed (各行を 2 つに分割する) と split (複数のファイルに分割する) を使用した単純なパイプで十分だと思います。

man コマンドはあなたの友達です。


宿題ではないことを確認後追記:

どうですか

sed 's/\(.....\)\(.....\)/\1\n\2/' input_file | split -l 2000000 - out-prefix-

?

于 2008-09-15T15:28:24.773 に答える
0

このようなものがうまくいくと思います:

out_file=1
out_pairs=0
cat $in_file | while read line; do
    if [ $out_pairs -gt 1000000 ]; then
        out_file=$(($out_file + 1))
        out_pairs=0
    fi
    echo "${line%?????}" >> out${out_file}
    echo "${line#?????}" >> out${out_file}
    out_pairs=$(($out_pairs + 1))
done

ただし、Perl を使用するよりも単純で効率的かどうかはわかりません。

于 2008-09-15T15:31:31.927 に答える
0

各行バリアントの最初の 5 文字。大きなファイルが x.txt と呼ばれ、現在のディレクトリに x.txt.* という名前のファイルを作成しても問題ないと仮定します。

split -l 2000000 x.txt x.txt.out && (x.txt.out* の splitfile の場合; outfile="${splitfile}.firstfive" を実行; echo "$splitfile -> $outfile"; cut -c 1 -5 "$splitfile" > "$outfile"; 完了)

于 2008-09-15T15:35:48.080 に答える