Diviser un file en deux

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.

Les references

  • 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