web-dev-qa-db-fra.com

Comment classer fractionné à un numéro de ligne

Je souhaite séparer un fichier journal de 400 000 lignes sur un numéro de ligne particulier.

Pour cette question, faisons en un nombre arbitraire 300k.

Existe-t-il une commande linux qui me permet de faire cela (dans le script)?

Je sais que split me permet de diviser le fichier en parties égales, par taille ou par numéro de ligne, mais ce n'est pas ce que je veux. Je veux les premiers 300k dans un fichier et les 100 derniers dans le second fichier.

Toute aide serait appréciée. Merci!

À bien y penser, cela conviendrait mieux au site superutilisateur ou serveur par défaut.

93
denormalizer
file_name=test.log

# set first K lines:
K=1000

# line count (N): 
N=$(wc -l < $file_name)

# length of the bottom file:
L=$(( $N - $K ))

# create the top of file: 
head -n $K $file_name > top_$file_name

# create bottom of file: 
tail -n $L $file_name > bottom_$file_name

Aussi, à bien y penser, la scission fonctionnera dans votre cas, car la première scission est plus grande que la seconde. Split place la balance de l'entrée dans la dernière division, donc

split -l 300000 file_name

affichera xaa avec 300 000 lignes et xab avec 100 000 lignes, pour une entrée comportant 400 000 lignes.

177
academicRobot