2012-01-13 13 views
20

Estoy tratando de eliminar las dos primeras líneas de un archivo simplemente no imprimiéndolo en otro archivo. No estoy buscando algo elegante. Aquí está mi (fallido) intento de awk:Eliminando las primeras dos líneas de un archivo usando BASH o awk o sed o lo que sea

awk '{ (NR > 2) {print} }' myfile 

que arroja el siguiente error:

awk: { NR > 2 {print} } 
awk:  ^syntax error 

Ejemplo:

contenido de 'mi_archivo':

blah 
blahsdfsj 
1 
2 
3 
4 

Lo Quiero que el resultado sea:

1 
2 
3 
4 

Respuesta

51

Uso de la cola:

tail -n+3 file 

de la página man:

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

Debería ser +3 (comenzar en la 3ª línea) ... – cmbuckley

+0

Tendría que ser 'tail -n + 3 file', ¡pero gracias! – Amit

16

estás muy cerca. Tal vez puedas probar:

awk 'NR > 2 { print }' myfile 

awk es basado en normas, y el Estado aparece desnudo (es decir, sin aparatos) antes del bloque que llenar de ejecutar si se aprueba.

También como Jaypal ha señalado, en AWK si lo que quieres hacer es imprimir la línea que coincide con las reglas incluso se puede omitir la acción, lo que simplifica el comando a:

awk 'NR > 2' myfile 
+0

También podría poner un 'si' antes de paréntesis, aunque su camino es mejor, ya que no compromete todas las líneas, solo las que ya coinciden. –

+1

Ni siquiera necesita '{print}'. 'awkish' sería' awk 'NR> 2' myfile' –

20

¿Qué tal:

tail +3 file 

O

awk 'NR>2' file 

O

sed '1,2d' file 
+1

Otra variante de sed: 'sed -n '3, $ p' file' – anubhava

4

awk se basa en pattern{action} declaraciones. En su caso, el pattern es NR>2 y el action que desea realizar es print. Este action es también el default action de awk.

Así que, aunque

awk 'NR>2{print}' filename

que funcionan bien, puede acortarlo a

awk 'NR>2' filename.

Cuestiones relacionadas