Estoy buscando una manera en Unix para dividir un archivo en dos archivos en un número de línea dado.
split -l 100 file_name
está cerca de lo que estoy buscando, pero este comando crea varios archivos, cada uno de 100 líneas. Estoy buscando un comando para dividir un archivo en dos archivos en un número de línea dado. ¿Hay alguna manera de hacer esto en Unix?
wc
antes y el archivo de entrada todavía se procesa solo una vez, como con laawk
solución.head
lea más de solo 100 líneas para encontrar las primeras 100 líneas a las que se enviaráf1.txt
; esos bytes adicionales no serán vistos porcat
.Use
awk
, por lo que necesita hacer una sola pasada a través del archivo de entrada. Lo siguiente asume que desea las primeras 122 líneas en el primer archivo y el resto en el segundo.fuente
Puede usar
head
ytail
para obtener ambas partes:donde
K
es el número de línea yL
es el número de líneas desde la parte inferior (número total de líneas -K
).(puede obtener el número total de líneas usando
wc -l file_name
).fuente
Puede usar
csplit
(si está disponible) para hacerlo:dividirá el archivo en dos partes, una parte hasta (e incluyendo) el número de línea
N
y la otra parte desde el número de líneaN+1
hasta la última línea.Si desea dividir hasta (pero sin incluir) el número de línea
N
:fuente
csplit
está optimizado para este trabajo.Tanto
head
ytail
tiene opciones para producir líneas de la "otra" final del archivo de lo que lo haría. Entonces tienes estas dos opciones:o (donde NNN es 100 menos que la salida de
wc -l source.txt
):Puede leer las páginas del manual para sus versiones
head
ytail
para obtener más información.fuente
Puede usar 'wc', 'dc', 'head' y 'tail'. Es decir
Para facilitar su uso, puede convertirlo en un script de shell.
fuente