2012-07-17 10 views
5

Dies ist so eine grundlegende Frage in awk. Aber ich habe Probleme damit und ich weiß nicht warum. Problem ist, wenn ich den awk-Befehl in einer einzigen Zeile laufen wieAusführen einer Awk durch Aufteilen der Zeilen

awk 'BEGIN {} {print $0;}' FILE 

Dann wird der Code perfecctly

laufen Aber wenn ich den Code zwischen den Zeilen aufgeteilt wie

awk ' 
BEGIN 
{ 
} 
{ 
     print $0; 
}' FILE 

Es gibt mir ein Fehler, dass BEGIN sollte eine Aktion Teil haben. Ich frage mich, da es der gleiche Code ist, den ich formatiere, warum bekomme ich diesen Fehler. Es ist wirklich wichtig für mich, dies zu lösen, da ich große Codezeilen in Awk schreiben würde, wäre es schwierig für mich, es zu formatieren und es immer in einer einzigen Zeile zu bringen. Könntest du mir bitte helfen? Vielen Dank. Hinweis. Ich führe dieses awk in Shell-Umgebung

+0

Wenn Sie in Ihrem BEGIN-Block keinen Code benötigen, sollten Sie ihn löschen. Sonst ... glaube was die Fehlermeldungen dir sagen! ;-) Versuch 'awk' BEGIN {}; {print $ 0;} 'FILE' um zu sehen, ob das die Fehlermeldung erzeugt. Viel Glück. – shellter

Antwort

5

Fügen Sie die '{' right after the BEGIN` und Sie werden nicht erhalten die Fehlermeldung.

Die Öffnung paren { für BEGIN muss auf der same Linie als BEGIN sein. Also, was Sie

awk ' 
BEGIN 
{ 

zu

awk ' 
BEGIN { 

haben ändern und Sie erhalten die Fehlermeldung nicht erhalten.

Die manual besagt, dass "BEGIN und END Regeln müssen Aktionen haben;", so dass ein anderes Problem sein kann. Diese

awk 'BEGIN {} ... 

scheint ein wenig seltsam für mich (und es gibt wirklich kein Grund, dies zu haben, wenn nichts geschieht)

@ Birei ist hilfreich Kommentar unten erklärt, dass die Art, wie diese Aussagen werden „analysieren wird In beiden Fällen unterscheidet sich das geöffnete '{' als eine Aktion ohne Muster (nicht verwandt mit BEGIN), während in derselben Zeile eine leere Aktion der BEGIN-Regel bedeutet. "

+1

+1, Parse wird in beiden Fällen unterschiedlich sein. Der offene Paren in der nächsten Zeile wird als eine Aktion ohne Muster analysiert (nicht verwandt mit 'BEGIN'), während in derselben Zeile eine leere Aktion der 'BEGIN'-Regel bedeutet. – Birei

+0

Natürlich können Sie Ihre eigene Antwort vervollständigen, wie Sie wünschen, machen Sie sich keine Sorgen um das Guthaben, ich habe nichts dagegen :-) – Birei

+0

@Birei Kredit, wo Kredit fällig ist :-) – Levon

Verwandte Themen