2010-08-18 23 views

Respuesta

149

tail --help dicta la siguiente:

-n, --lines=K   output the last K lines, instead of the last 10; 
          or use -n +K to output lines starting with the Kth 

Así que para filtrar las primeras líneas 2, -n +3 debe darle la salida que busca (inicio del 3).

+2

Curiosamente, mi página de hombre no muestra la opción, pero funciona muy bien, ¡gracias! –

+0

@Nicholas: extraño, pensé que sería la documentación estándar, independientemente del sistema operativo. Saqué eso de Cygwin dentro de Windows, así que no sé cómo se verá en varias distribuciones de Linux. Me alegro de que funcionó. –

+0

@NicholasMTElliott [man7] (http://man7.org/linux/man-pages/man1/tail.1.html) lo enumera como la página de manual de Joe Enos, por lo que es probable que sea un problema de versión de página de manual –

0

usar esto, suponiendo que la primera muestra a continuación, se llama sample1.dat tail --lines=3 sample1.dat que imprimir todas las líneas de la tercera línea a la última línea.

Para la segunda muestra, de nuevo supongo que se llama sample2.dat sería tail --lines=-1 sample2.dat que imprimir la última línea ...

+0

Pero Nicholas no sabe N por adelantado .... –

+0

@Jim: ¿cuál es la diferencia con la tuya y la mía? .... lo mismo ....: o Me refería a las dos entradas del archivo de datos de muestra según su pregunta y mostrando cómo lograr lo que estaba buscando ... – t0mm13b

+0

Ok ... entonces ¿por qué pidió la segunda muestra y mostró el resultado que quería, que es lo que usé 'tail --lines = - 1 '... por supuesto, puedes omitir el nombre del archivo por completo y todavía puede actuar como una tubería ... hmm – t0mm13b

4

tail -n +linecount filename comenzará la producción en línea de linecount de filename, por lo tail -n +3 filename debe hacer lo usted quiere.

+0

Esto no funcionaría en mi caparazón, pero 'cola -n + nombre de archivo 17" lo haría. Uso bash/ubuntu LTS – isomorphismes

+1

@iso: gracias por el heads-up: las versiones anteriores de 'tail' aceptaban la sintaxis que usaba en mi respuesta original, pero ahora es necesario usar la opción explícita' -n'. He actualizado mi respuesta en consecuencia. –

15

Asumiendo que su versión de la cola lo soporta, puede especificar a partir de la cola después de las líneas X. En tu caso, harías 2 + 1.

tail -n +3 

[[email protected] ~]$ tail -n +3 stack_overflow.txt 
CCCC 
DDDD 
EEEE 
0

Realmente no sé cómo hacerlo desde sólo la cola o la cabeza, pero con la ayuda de wc -l (número de líneas) y la expresión de fiesta, se puede lograr eso.

tail -$(($(wc -l $FILE | grep -Eo '[0-9]+') - 2)) $FILE

Espero que esto ayude.

+1

Esto requiere un pase completo sobre el archivo antes de ejecutar tail. Si el archivo es mayor que el tamaño de la memoria, esto será muy ineficiente. No maneja archivos de menos de dos líneas. No maneja el tamaño de cambio de archivo entre el wc y la cola. – janm

+2

@janm: Estás bien. Otras respuestas son simplemente mejores. Me siento avergonzado. :-p – NawaMan

11

Una solución sencilla usando awk:

awk 'NR > 2 { print }' file.name 
+0

Uno de nosotros está confundido. Las preguntas dicen: "todas menos las primeras 2 líneas del archivo". ¿Cómo ese comando no cumple con el requisito? – janm

+4

'{print}' es la acción predeterminada, y se puede omitir. – tripleee

-1

usando awk para obtener todos excepto el último de 2 líneas

awk 'FNR==NR{n=FNR}FNR<=n-3{print}' file file 

awk para obtener todos menos los primeros 2 líneas

awk 'NR>2' file 

O se puede utilizar más

more +2 file 

o simplemente fiesta

#!/bin/bash 

i=0 
while read -r line 
do 
    [[ $i > 1 ]] && echo "$line" 
    ((i++)) 
done <"file" 
+0

Ahora esto no cumple con el requisito. La pregunta dice "todas menos las dos primeras líneas del archivo" y ofrece dos ejemplos, cada uno con un único archivo, donde las primeras dos líneas se omiten y el resto del archivo se envía a stdout. Eso no es lo que hace este comando. – janm

+0

sí, leí mal la pregunta. pensó que él es pedir todo pero las últimas 2 líneas. – ghostdog74

7

Trate sed 1,2d. Reemplace 2 según sea necesario.

+0

funcionó como se esperaba ... ya que se desconoce el número de líneas después de las primeras 2 líneas. – kumarprd

Cuestiones relacionadas