scripts script programacion operaciones manejo eliminar ejemplos comandos comando caracter cadenas cadena buscar aritmeticas linux bash printing skip

linux - programacion - scripts bash ejemplos



Imprime un archivo saltando las primeras X lĂ­neas en Bash (13)

Tengo un archivo muy largo que quiero imprimir, pero omitiendo las primeras líneas 1e6, por ejemplo. Miro la página del manual del gato, pero no vi ninguna opción para hacer esto. Estoy buscando un comando para hacer esto o un programa bash simple.


Este script de shell funciona bien para mí:

#!/bin/bash awk -v initial_line=$1 -v end_line=$2 ''{ if (NR >= initial_line && NR <= end_line) print $0 }'' $3

Utilizado con este archivo de muestra (archivo.txt):

one two three four five six

El comando (se extraerá de la segunda a la cuarta línea del archivo):

edu@debian5:~$./script.sh 2 4 file.txt

Salida de este comando:

two three four

Por supuesto, puede mejorarlo, por ejemplo, comprobando que todos los valores de argumento son los esperados :-)


La forma más fácil que encontré para eliminar las primeras diez líneas de un archivo:

$ sed 1,10d file.txt


Necesitaba hacer lo mismo y encontré este hilo.

Intenté "tail -n +, pero simplemente imprimí todo.

Las más + líneas funcionaron muy bien en el indicador, pero resultó que se comportó de manera totalmente diferente cuando se ejecutó en modo sin cabeza (cronjob).

Finalmente escribí esto yo mismo:

skip=5 FILE="/tmp/filetoprint" tail -n$((`cat "${FILE}" | wc -l` - skip)) "${FILE}"


Necesitarás cola.

$ tail great-big-file.log < Last 10 lines of great-big-file.log >

Si realmente necesita SKIP un número particular de líneas, use

$ tail -n +<N+1> <filename> < filename, excluding first N lines. >

Es decir, si desea omitir N líneas, comienza a imprimir la línea N + 1. Ejemplo:

$ tail -n +11 /tmp/myfile < /tmp/myfile, starting at line 11, or skipping the first 10 lines. >

Si solo desea ver las últimas líneas, omita el "+":

$ tail -n <N> <filename> < last N lines of file. >


Puedes hacer esto usando los comandos de cabeza y cola:

head -n <num> | tail -n <lines to print>

donde num es 1e6 + el número de líneas que desea imprimir.


Si desea ver la primera línea de 10 puede usar sed como se muestra a continuación:

sed -n ''1,10 p'' myFile.txt

o si quieres ver líneas del 20 al 30 puedes usar:

sed -n ''20,30 p'' myFile.txt


Si tiene una cola GNU disponible en su sistema, puede hacer lo siguiente:

tail -n +1000001 huge-file.log

Es el personaje + que hace lo que quieres. Para citar de la página man:

Si el primer carácter de K (el número de bytes o líneas) es un ''+'', imprima comenzando con el elemento Kth desde el inicio de cada archivo.

Por lo tanto, como se señaló en el comentario, poner +1000001 comienza a imprimir con el primer elemento después de las primeras 1,000,000 de líneas.


Solo para proponer una alternativa sed . :) Para saltar el primer millón de líneas, pruebe |sed ''1,1000000d'' .

Ejemplo:

$ perl -wle ''print for (1..1_000_005)''|sed ''1,1000000d'' 1000001 1000002 1000003 1000004 1000005


Una versión menos detallada con AWK:

awk ''NR > 1e6'' myfile.txt

Pero recomendaría usar números enteros.


Utilice el comando sed delete con una dirección de rango . Por ejemplo:

$ sed 1,100d file.txt # Print file.txt omitting lines 1-100.

Alternativamente, si solo desea imprimir un rango conocido, use el comando imprimir con la -n :

$ sed -n 201,300p file.txt # Print lines 201-300 from file.txt

Esta solución debería funcionar de manera confiable en todos los sistemas UNIX, independientemente de la presencia de las utilidades GNU.


si quieres saltarte la primera linea
tail -n +3 <filename>

si quieres saltarte la primera x linea
tail -n +$((x+1)) <filename>


cat < File > | awk ''{if(NR > 6) print $0}''


sed -n ''1d;p''

Este comando borrará la primera línea e imprimirá el resto.