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?

Marguerite
la source
quel devrait être le nom du fichier?
Rahul Patil
vous voulez créer un fichier de chaque ligne? J'ai bon ?
Rahul Patil
noms séquentiels: unix.stackexchange.com/questions/164903/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

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.

don_crissti
la source
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.

Rahul Patil
la source
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"
Uwe
la source