2013-02-20 3 views
17

を使用してファイルを分割する方法。これは、すべての50,000行を分割し、4桁の数字の接尾辞を使用する必要があります。このファイルは約1億4000万行です。私は、ファイルを分割するには、次のコマンドを使用している数字の接尾辞

split -d -l -n 4 50000 domains.xml domains_ 

しかし、私は、私はこのエラーを取得していますことを実行します。

split: -n: invalid number of lines 
Try `split --help' for more information. 

このため、正しいコマンドは何ですか?

答えて

4

私はawkを使用します。出力ファイルとファイル名を細かく制御できます。それはちょうどまた速く尋ねるべきである。ここでは20行のブロックに100行のファイルを分割する方法は次のとおりです。それに応じて調整し

file_0020 
file_0040 
file_0060 
file_0080 
file_0100 

awk 'NR%20==1 { file = FILENAME "_" sprintf("%04d", NR+19) } { print > file }' domains.xml 

これは次のようにいくつかのファイルを作成する必要があります。 HTH。

32

GNU splitから主の助けが言うので:

Usage: /usr/gnu/bin/split [OPTION]... [INPUT [PREFIX]] 
Output fixed-size pieces of INPUT to PREFIXaa, PREFIXab, ...; default 
size is 1000 lines, and default PREFIX is 'x'. With no INPUT, or when INPUT 
is -, read standard input. 

Mandatory arguments to long options are mandatory for short options too. 
    -a, --suffix-length=N generate suffixes of length N (default 2) 
     --additional-suffix=SUFFIX append an additional SUFFIX to file names. 
    -b, --bytes=SIZE  put SIZE bytes per output file 
    -C, --line-bytes=SIZE put at most SIZE bytes of lines per output file 
    -d, --numeric-suffixes[=FROM] use numeric suffixes instead of alphabetic. 
            FROM changes the start value (default 0). 
    -e, --elide-empty-files do not generate empty output files with '-n' 
     --filter=COMMAND write to shell COMMAND; file name is $FILE 
    -l, --lines=NUMBER  put NUMBER lines per output file 
    -n, --number=CHUNKS  generate CHUNKS output files. See below 
    -u, --unbuffered  immediately copy input to output with '-n r/...' 
     --verbose   print a diagnostic just before each 
          output file is opened 
     --help  display this help and exit 
     --version output version information and exit 

あなたのオプションビットを再編成する必要があるようですが、私には見えます:

split -a 4 -d -l 50000 domains.xml domains_ 
5

を(manページから、GNUは8.21をcoreutilsの)あなたが必要なもの/ -aのようです - 接尾語長= N(長さN(デフォルト2)のサフィックスを生成する)、-nない/ - 数= CHUNKS(チャンク出力ファイルを生成する)

split -d -l 50000 -a 4 domains.xml domains_ 

、あなたが取得する必要があります:domains_0000を、domains_0001 ...

0

これがあなたを助けている場合、私は知りませんが、あなたはすなわちoutfile1あなたがで終わるだろう、あなたのファイル名の先頭に1を追加した場合:

outfile101 
outfile102 
outfile103 

私はコンピュータ科学者は、「常にゼロから数える」場合は、関係なく、これはあなたが探しているものではないかもしれませんが、様々なプログラムは、ジョブ配列の先行ゼロを解析し、そのようなはありません理解しています。少なくとも、この方法は、あなたは、プログラムの広い範囲であなたのファイルを解析することができます。

関連する問題