J'ai un gros file et j'ai besoin de split en deux files. Supposons que dans le premier file les 1000 lignes doivent être sélectionnées et placées dans un autre file et supprimer ces lignes dans le premier file.
J'ai essayé d'utiliser split
mais il crée plusieurs morceaux.
Le moyen le plus simple est probablement d'utiliser la head
et la tail
:
$ head -n 1000 input-file > output1 $ tail -n +1001 input-file > output2
Cela mettra les 1000 premières lignes du input-file
d' input-file
dans output1
, et toutes les lignes de 1001 jusqu'à la fin dans output2
Je pense que cette split
est la meilleure approche.
Essayez d'utiliser l'option -l xxxx
, où xxxx est le nombre de lignes souhaité dans chaque file (par défaut 1000).
Vous pouvez utiliser l'option -n yy
si vous êtes plus préoccupé par la quantité de files créés. Utilisez -n 2
splita votre file en seulement 2 parties, peu importe la quantité de lignes dans chaque file.
Vous pouvez countr la quantité de lignes dans votre file avec wc -l filename
. C'est la command 'wordcount' avec l'option lignes.
man split
man wc
C'est un travail pour csplit
:
csplit -s input_file 1001
splita en input input_file
, la première pièce xx00
– jusqu'à la ligne 1001 sans la ligne 1001 et la seconde pièce xx01
– les lignes restantes.
Vous pouvez jouer avec les options si vous avez besoin de différents noms de files de sortie, par exemple en utilisant -f
et en spécifiant un préfixe :
csplit -sf piece. input_file 1001
produit deux files nommés piece.00
et piece.01
Une façon simple de faire ce que la question request, en une seule command:
awk '{ if (NR <= 1000) print > "piece1"; else print > "piece2"; }' bigfile
ou, pour ceux d'entre vous qui détestent vraiment taper des commands longues, intuitivement compréhensibles,
awk '{ print > ((NR <= 1000) ? "piece1" : "piece2"); }' bigfile