2008-09-15 14 views
1

かなり大きなファイル(1億5000万行の10文字)があります。私は200万行の150ファイルに分割する必要があり、各出力行はソース行の最初の5文字または最後の5文字です。 私はPerlでこれをやや早く行うことができましたが、bashを使って簡単に解決できるかどうか疑問に思っていました。 アイデアLinux/bashでファイルとその行を分割する

+0

私は、変換が正確であることを少しはっきりさせる必要があると思います。 (つまり、私はそれを取得しません)おそらく小さな例ですか? – mweerden

答えて

3

宿題? :-)

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

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

どの程度

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

:それは宿題ではないことを確認した後に追加されました


+0

宿題はなく、サイトをテストするだけです。ご回答有難うございます。 – Sklivvz

+0

素晴らしい!最後に私はこれを使用しました:* .txtのファイルには ; echo $ file;を実行します。 sedの/ \(..... \)\(..... \)/ \ 1 \ r \ n \ 2/'$ file | split -l 2000000 - $ file.part .;完了 – Sklivvz

0

は、私はこのような何かが仕事ができると思う:それはしかし、単純またはPerlを使用するよりも効率的かどう

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 

わかりません。

0

X.TXTと呼ばれるその大きなファイルを想定して、それが名前のX.TXTと、現在のディレクトリ内のファイルを作成するにはOKだと仮定すると、各ラインのバリアントの最初の5つの文字は、*:。

は-l 2000000 Xを分割.txt x.txt.out & &(x.txt.out *の分割ファイル用); outfile = "$ {splitfile} .firstfive"; echo "$ splitfile-> $ outfile"; cut -c 1-5 "$ splitfile ">" $ outfile "; done)

関連する問題