it-swarm.com.de

Löschen der ersten beiden Zeilen einer Datei mit BASH oder awk oder sed oder was auch immer

Ich versuche, die ersten beiden Zeilen einer Datei zu löschen, indem ich sie einfach nicht in eine andere Datei drucke. Ich bin nicht auf der Suche nach etwas Besonderem. Hier ist mein (fehlgeschlagener) Versuch bei awk:

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

Das löst den folgenden Fehler aus:

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

Beispiel:

inhalt von 'myfile':

blah
blahsdfsj
1 
2
3
4

Was ich möchte, ist das Ergebnis:

1
2
3
4
30
Amit

Schwanz verwenden:

tail -n+3 file

von der man Seite:

   -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

Wie wäre es mit:

tail +3 file

OR

awk 'NR>2' file

OR

sed '1,2d' file
29
anubhava

Sie sind fast da. Versuchen Sie dies stattdessen:

awk 'NR > 2 { print }' myfile

awk ist regelbasiert und die Regel erscheint leer (d. h. ohne geschweifte Klammern), bevor der Block ausgeführt wird, wenn er besteht.

Auch Jaypal hat darauf hingewiesen, dass Sie in awk, wenn Sie nur die Zeile drucken möchten, die den Regeln entspricht, die Aktion sogar weglassen können, um den Befehl zu vereinfachen:

awk 'NR > 2' myfile
24
Chris J

awk basiert auf pattern{action} Aussagen. In Ihrem Fall ist patternNR>2 und das action, das Sie ausführen möchten, ist print. Dieses action ist auch das default action von awk.

Obwohl

awk 'NR>2{print}' filename

würde gut funktionieren, du kannst es auf kürzen

awk 'NR>2' filename.

6
jaypal singh