2013-02-20 12 views
17

Używam następującego polecenia, aby podzielić plik. Powinien rozdzielić każde 50 000 linii i użyć 4-cyfrowego sufiksu numerycznego. Plik ma około 140 milionów linii.Sposób dzielenia pliku przy użyciu przyrostka liczbowego

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

Ale kiedy biegnę, że ja dostaję ten błąd:

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

Jaka jest poprawna komenda do tego?

Odpowiedz

4

Chciałbym użyć awk. Zapewnia lepszą kontrolę nad plikami wyjściowymi i nazwami plików. Powinieneś też po prostu zapytać szybko. Oto jak podzielić plik 100 linii na 20 bloków liniowych:

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

Należy stworzyć kilka plików, takich jak:

file_0020 
file_0040 
file_0060 
file_0080 
file_0100 

Dostosuj odpowiednio. HTH.

32

Ponieważ podstawową pomoc od GNU split mówi:

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 

ona patrzy na mnie jak trzeba reorganizować opcje trochę:

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

(Z podręcznika GNU Coreutils 8.21) Wydaje się, że potrzebna jest -a/- przyrostek-length = N (generowanie sufiksów o długości N (domyślnie 2)), a nie -n/- number = CHUNKS (generowanie plików wyjściowych CHUNKS)

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

i powinieneś dostać: domains_0000, domains_0001 ...

0

ja nie wiem, czy to pomaga, ale jeśli dodać 1 do nazwa pliku prefiks czyli outfile1 skończy się z:

outfile101 
outfile102 
outfile103 

Rozumiem, że to może nie być to, czego szukasz, ale różne programy nie analizują początkowych zer w tablicach zadań i tak, bez względu na to, czy informatycy "zawsze liczą od zera". Przynajmniej w ten sposób możesz sparsować swoje pliki w szerszym zakresie programów.

Powiązane problemy