Diviser le fichier en plusieurs petits fichiers, séparés par le symbole de nouvelle ligne


13

Existe-t-il un utilitaire qui divise le fichier par symbole de nouvelle ligne? par exemple, si un fichier contient les lignes suivantes,

aa
bbb
cccc

Si je veux le diviser en 3 fichiers, la sortie souhaitée serait:

aa, bbbEt cccc(dans 3 fichiers différents)

J'ai déjà vérifié la splitcommande, elle ne coupe que les fichiers par taille de fichier, pas ce que je veux.

Si je n'ai pas écrit moi-même un utilitaire, existe-t-il un outil standard à utiliser?


quel devrait être le nom du fichier?
Rahul Patil

vous voulez créer un fichier de chaque ligne? J'ai bon ?
Rahul Patil

Réponses:


14

À moins que je manque quelque chose, splitest-ce que vous divisez par ligne si vous utilisez -lswitch

   -l, --lines=NUMBER
          put NUMBER lines per output file

donc

split -l 1 inputfile

devrait faire ce que vous voulez.


4
awk '{print > $0".txt" }'  inputfile

créerait un fichier par ligne unique dans le fichier d'entrée nommé d'après le contenu de ces lignes (avec une .txtextension). Mais attention, lorsque la limite des fichiers ouverts simultanés est atteinte, certaines awkimplémentations échouent.

Ou

awk '{f = "output_file." NR; print $0 > f; close(f)}' inputfile

Pour avoir des fichiers de sortie numérotés.


Vous voudrez peut-être fermer () le fichier de sortie après son écriture, sinon vous rencontrerez le nombre maximal de fichiers ouverts avec la plupart des implémentations awk.
Stéphane Chazelas

Je ne le sais pas .. pouvez-vous faire ça pour moi? merci ..
Rahul Patil

3
A=0
while IFS= read -r LINE ; do
  printf '%s\n' "$LINE" > newfile$A
  (( A++ ))
done < "$INPUTFILE"
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.