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