Divida el archivo en varios archivos pequeños, separados por el símbolo de nueva línea


13

¿Hay alguna utilidad que divida el archivo por el símbolo de nueva línea? por ejemplo, si un archivo contiene las siguientes líneas,

aa
bbb
cccc

Si quiero dividirlo en 3 archivos, el resultado deseado sería:

aa, bbbY cccc(en 3 archivos diferentes)

Ya revisé el splitcomando, solo cortó el archivo por tamaño de archivo, no lo que quiero.

Si no escribí una utilidad yo mismo, ¿hay alguna herramienta estándar para usar?


¿Cuál debería ser el nombre del archivo?
Rahul Patil

quieres crear un archivo de cada línea? Estoy en lo correcto ?
Rahul Patil

Respuestas:


14

A menos que me falte algo, splitse divide por línea si usa el -linterruptor:

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

entonces

split -l 1 inputfile

Debes hacer lo que quieras.


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

crearía un archivo por línea única en el archivo de entrada con el nombre del contenido de esas líneas (con una .txtextensión). Pero tenga en cuenta que cuando se alcanza el límite de archivos abiertos concurrentes, algunas awkimplementaciones fallarán.

O

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

Tener archivos de salida numerados.


Es posible que desee cerrar () el archivo de salida después de que esté escrito; de lo contrario, se encontrará con el límite máximo de archivos abiertos con la mayoría de las implementaciones de awk.
Stéphane Chazelas

no estoy consciente de eso ... ¿puedes hacer eso por mí? gracias ..
Rahul Patil

3
A=0
while IFS= read -r LINE ; do
  printf '%s\n' "$LINE" > newfile$A
  (( A++ ))
done < "$INPUTFILE"
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.