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_nameestá 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?

wcantes y el archivo de entrada todavía se procesa solo una vez, como con laawksolución.headlea 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
headytailpara obtener ambas partes:donde
Kes el número de línea yLes 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
Ny la otra parte desde el número de líneaN+1hasta la última línea.Si desea dividir hasta (pero sin incluir) el número de línea
N:fuente
csplitestá optimizado para este trabajo.Tanto
headytailtiene 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
headytailpara 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