J'utilise la commande suivante pour diviser un fichier. Il doit se diviser toutes les 50 000 lignes et utiliser un suffixe numérique à 4 chiffres. Le fichier compte environ 140 millions de lignes.
split -d -l -n 4 50000 domains.xml domains_
Mais quand je cours, j'obtiens cette erreur:
split: -n: invalid number of lines
Try `split --help' for more information.
Quelle est la bonne commande pour cela?
J'utiliserais awk
. Il vous donne un contrôle plus fin sur vos fichiers de sortie et vos noms de fichiers. Il faut juste demander vite aussi. Voici comment diviser un fichier de 100 lignes en blocs de 20 lignes:
awk 'NR%20==1 { file = FILENAME "_" sprintf("%04d", NR+19) } { print > file }' domains.xml
Cela devrait créer des fichiers comme:
file_0020
file_0040
file_0060
file_0080
file_0100
Ajuste en accord. HTH.
Depuis l'aide principale de GNU split
dit:
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
Il me semble que vous devez réorganiser un peu vos options:
split -a 4 -d -l 50000 domains.xml domains_
(D'après la page de manuel, GNU coreutils 8.21) Ce dont vous avez besoin semble être -a/- suffix-length = N (générer des suffixes de longueur N (par défaut 2)), pas -n/- -number = CHUNKS (générer des fichiers de sortie CHUNKS)
split -d -l 50000 -a 4 domains.xml domains_
et vous devriez obtenir: domaines_0000, domaines_0001 ...