Las variantes de esta pregunta ciertamente se han hecho varias veces en diferentes lugares, pero estoy tratando de eliminar las últimas M
líneas de un archivo sin suerte.
La segunda respuesta más votada en esta pregunta recomienda hacer lo siguiente para eliminar la última línea de un archivo:
head -n -1 foo.txt > temp.txt
Sin embargo, cuando intento eso en OSX y Zsh, obtengo:
head: illegal line count -- -1
¿Porqué es eso? ¿Cómo puedo eliminar las M
últimas líneas y las primeras N
líneas de un archivo dado?
head --version
? ¿Qué sistema estás usando?head --version
devuelve un error en realidad.Respuestas:
Puede eliminar las primeras 12 líneas con:
(Eso significa imprimir desde la línea 13).
Algunas implementaciones de soporte
head
similar a GNUhead
:Pero eso no es estándar.
funcionaría en aquellos sistemas que tienen
tail -r
(ver también GNUtac
) pero son subóptimos.Donde
n
es 1:También puedes hacer:
eliminar 2 líneas, pero eso no es óptimo.
Tu puedes hacer:
Pero tenga en cuenta que no funcionará con grandes valores de n con algunas
sed
implementaciones.Con
awk
:Para eliminar
m
líneas del principio yn
del final:fuente
sed 'x;1d;$d'
también podría usarse para obtener las dos últimas líneas. Y con un par deN
's después1d
podría usarse para obtener un poco más que eso, aunque en ese momento no ofrece ninguna ventaja sobre elN;P;D
ciclo que ya recomienda.m
on
son0
. De lo contrario, sería perfecto.Puede usar la siguiente forma para eliminar las primeras N líneas y las últimas M líneas.
Con
N=5
,M=7
y el archivotest.txt
:El comando imprime todas las líneas desde N + 1 hasta LastLine-M.
Otra opción es usar python:
fuente
Puede eliminar las últimas
M
líneas (aquí M = 100) de un archivo con:fuente