GNU/Linux >> Tutoriales Linux >  >> Ubuntu

¿Dividir un archivo basado en un conjunto predefinido de filas?

Quiero dividir un archivo de texto según un conjunto predefinido de filas.
Por ejemplo. tengo un archivo

a
b
c
d
e
f

Y luego tengo los siguientes conjuntos de filas (estos podrían almacenarse como sea más conveniente, en un archivo, en varios archivos,...).

1,2
3,6
5,4

Quiero dividir mi archivo para recuperar 3 archivos como:

archivo1

a
b

archivo2

c
f

archivo3

e
d

Respuesta aceptada:

Aquí hay un bash script asumiendo que su archivo de entrada se llama infile y los rangos se almacenan 1 por línea en un archivo llamado splits:

i=1
for range in $(< splits); do
  sed -n "$(echo "$range" | cut -f1 -d, )p" infile > "file$i"
  sed -n "$(echo "$range" | cut -f2 -d, )p" infile >> "file$i"
  ((i++))
done

Esto simplemente usa sed para imprimir las líneas especificadas por los rangos y guarda cada resultado como un archivo nuevo (los archivos creados se denominan archivo1 archivo2 archivo3 etc.). Dos invocaciones de sed se utilizan para conservar el orden especificado de las filas.

Tenga en cuenta que este simple script no realiza ninguna verificación de formato o error, y los archivos existentes se nombran, p. el archivo 1 se sobrescribirá.

Una alternativa simplificada (cortesía de @muru) usando while read y dejar que bash divida los rangos en lugar de cortar:

i=1
while IFS=',' read n1 n2 
do
    sed -n "$n1 p; $n2 p" infile > "file$i"
    ((i++))
done < splits

Si el orden de las líneas en los archivos de salida es importante (por ejemplo, filas 5,4 !=4,5), entonces sed bit deberá dividirse en dos invocaciones separadas similares a la primera secuencia de comandos.


Ubuntu
  1. Cómo dividir un solo archivo en varios archivos según las filas

  2. Ubuntu:¿Dividir el audio en varias piezas en función de las marcas de tiempo de un archivo de texto con Sox o Ffmpeg?

  3. ¿Cómo instalar Ubuntu desde un archivo Iso?

  4. ¿Uso de Sed para actualizar el archivo Grub?

  5. Texto de archivo múltiple ¿Reemplazar con Sed?

Cómo habilitar y configurar el archivo .htaccess en Apache

Sustitución de cadena en Bash

Cómo configurar NFS Share en Ubuntu 20.04, 18.04

¿Cómo reemplazar una cadena en un archivo (s)?

¿Mostrar todo el archivo hasta el partido?

¿Cómo dividir un archivo Mp3?