web-dev-qa-db-fra.com

Suppression des deux premières lignes d'un fichier en utilisant BASH ou awk ou sed ou autre

J'essaie de supprimer les deux premières lignes d'un fichier en ne l'imprimant tout simplement pas dans un autre fichier. Je ne cherche pas quelque chose d'extraordinaire. Voici ma tentative (ratée) de awk:

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

Cela jette l'erreur suivante:

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

Exemple:

contenu de "monfichier":

blah
blahsdfsj
1 
2
3
4

Ce que je veux que le résultat soit:

1
2
3
4
30
Amit

Utilisez la queue:

tail -n+3 file

à partir de la page de manuel:

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

Que diriez-vous:

tail +3 file

OR

awk 'NR>2' file

OR

sed '1,2d' file
29
anubhava

Vous y êtes presque. Essayez plutôt ceci:

awk 'NR > 2 { print }' myfile

awk est basé sur des règles, et la règle apparaît nue (c'est-à-dire sans accolades) avant le bloc qu'il exécuterait s'il passe.

Aussi, comme l'a souligné Jaypal, dans awk si tout ce que vous voulez faire est d'imprimer la ligne qui correspond aux règles, vous pouvez même omettre l'action, simplifiant ainsi la commande pour:

awk 'NR > 2' myfile
24
Chris J

awk est basé sur pattern{action} déclarations. Dans votre cas, le pattern est NR>2 et le action que vous souhaitez effectuer est print. Ce action est aussi le default action sur awk.

Donc même si

awk 'NR>2{print}' filename

fonctionnerait bien, vous pouvez le raccourcir en

awk 'NR>2' filename.

6
jaypal singh