teclas teclado para metodos mac guardar como combinaciones comandos atajos atajo abreviados macos unix command-line scripting

macos - teclado - ¿Cuál es una manera fácil de recortar N líneas de la cola de un archivo(sin el uso de ''cabeza'')?



teclas de atajo para word (7)

Digamos que tengo un montón de archivos que tienen> 100 líneas de largo. Me gustaría recortar las 14 líneas superiores y las 9 líneas inferiores, dejando solo las líneas en el medio. Este comando recortará los catorce primeros:

cat myfile.txt | tail -n +15

¿Hay otro comando que pueda pasar para recortar la parte inferior 9 sin pasar explícitamente la longitud del archivo?

Editado para agregar: mi versión de head (Mac OS 10.5) no acepta un número negativo de líneas como parámetro.


El comando principal debe hacer lo que quieras. Funciona igual que la tail pero desde el otro extremo del archivo.


Lo que jbourque dijo es completamente correcto. Simplemente no era demasiado prolijo al respecto:

cat myfile.txt | tail -n +15 | head -n -9


Puedes usar sed:

sed -n -e :a -e ''1,9!{P;N;D;};N;ba'' myfile.txt

También puedes usar sed para los primeros 15:

sed ''1,15d'' myfile.txt


Si puede reconocer las últimas 9 líneas por un patrón distintivo para la primera de esas líneas, entonces un simple comando de sed haría el truco:

sed -e ''1,15d'' -e ''/distinctive-pattern/,$d'' $file

Si necesita un desplazamiento numérico puro desde la parte inferior, sed estándar (en lugar de GNU) no ayudará, pero ed sería:

ed $file <<''!'' 1,15d $-8,$d w q !

Esto sobrescribe los archivos originales. Tendría que crear un script donde se escribe el archivo si desea evitar eso.


Use un número negativo de líneas con el comando principal:

cat myfile.txt | head -n -9

Eso imprime todo excepto las últimas 9 líneas.


Esto también debería funcionar, y hace cosas en un solo proceso:

seq 15 | awk -v N=5 '' { lines[NR % N] = $0 } END { i = NR-N+1; if (i<0) i=0; for (; i <= NR; ++i) print lines[i % N] }''

(El seq es solo una manera fácil de producir algunos datos de prueba).


Esto funcionará en OS X y podría ser un poco más fácil de entender que el ejemplo sed :

< myfile.txt tail -n +15 | tail -r | tail -n +10 | tail -r

Por supuesto, si puede tener en sus manos la versión de la head de GNU, se puede hacer aún más elegantemente:

< myfile.txt tail -n +15 | head -n -9

Tenga en cuenta que la tail comienza en la enésima línea mientras que la head salta en n líneas de la entrada.