2013-02-20 4 views
17

Я использую следующую команду для разбиения файла. Он должен разделить каждые 50 000 строк и использовать 4-значный цифровой суффикс. Файл составляет около 140 миллионов строк.Как разбить файл с помощью числового суффикса

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

Но когда я бегу, что я получаю эту ошибку:

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

Что правильная команда для этого?

ответ

4

Я бы использовал awk. Это дает вам более точный контроль над вашими выходными файлами и именами файлов. Нужно просто быстро спросить. Вот как разделить файл на 100 строки в 20 блоков строк:

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

Это должно создать несколько файлов, такие как:

file_0020 
file_0040 
file_0060 
file_0080 
file_0100 

Отрегулировать соответственно. НТН.

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

(Из страницы руководства, GNU Coreutils 8.21) Вам нужно, по-видимому, быть -a/- suffix-length = N (сгенерировать суффиксы длины N (по умолчанию 2)), not -n/- number = CHUNKS (генерировать выходные файлы CHUNKS)

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

и вы должны получить: domains_0000, domains_0001 ...

0

Я не знаю, если это поможет, но если вы добавляете 1 к вашему имени файла префикс т.е. outfile1 вы будете в конечном итоге с:

outfile101 
outfile102 
outfile103 

Я понимаю, что это может быть не то, что вы ищете, но различные программы не анализируют ведущие нули в массивах заданий и т. Д., Независимо от того, будут ли ученые-компьютеры «всегда считаться с нуля». По крайней мере, таким образом вы можете анализировать свои файлы с помощью более широкого спектра программ.

Смежные вопросы