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?

margarita
fuente
¿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
nombres secuenciales: unix.stackexchange.com/questions/164903/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

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.

don_crissti
fuente
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.

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