Wann wird awk als Befehl oder als Programmiersprache interpretiert?

Wann wird awk als Befehl oder als Programmiersprache interpretiert?

Ich weiß, dass es awksich um eine Skript-Programmiersprache handelt, aber manchmal bin ich mir nicht sicher, wann ich es als Befehl oder als Programm interpretiere.

Beispiel 1-Das interpretiere ich als Befehl:

awk '{print $2}' file.txt

Beispiel 2-Hier interpretiere ich als awk-Programm:

awk 'BEGIN      {skip = 0} \
        skip == 0  {if (NF == 0) 
                     {skip = 1}  \
                    else 
                     {print};  \
                    next} \
        skip == 1  {print; \
                    skip = 0; \
                    next}'

Genommen vonHier.

Die Fragen sind:

  1. Wann muss awk als Befehl interpretiert werden?
  2. Wann ist awk ein Programm?
  3. Es gibt ein Problem, mein erstes Beispiel als awkBefehl aufzurufen?

Etwas wie:

awk '{print $2}' file.txt | awk '{FS=" "} {print 4}'

bedeutet, dass awkProgramme über Pipes kommunizieren können?

Antwort1

awkhat zwei Aufrufmodi, einen mit einem Programmtext in der Befehlszeile und den anderen mit einem Programm aus einer Datei. Dies wird in der Zusammenfassung der Manpage von awk angegeben (diese hier ist von mawk unter Ubuntu 12.04):

   mawk  [-W  option] [-F value] [-v var=value] [--] 'program text' [file
   ...]
   mawk [-W option] [-F value]  [-v  var=value]  [-f  program-file]  [--]
   [file ...]

Ob die erste Form als Programm bezeichnet wird oder nicht, hängt von der Programmdefinition ab, die Sie verwenden möchten. Ich würde sagen, dass beide Formen Programme beinhalten, wobei in der ersten das Programm als Befehlszeilenargument angegeben wird. Beide Ihrer Beispiele müssen der ersten Form entsprechen, da keines die -fOption beinhaltet. Dass das zweite Beispiel ein mehrzeiliges Befehlszeilenargument hat, ist in dieser Hinsicht irrelevant.

Dies ist nicht eindeutig auf zutreffen awk. Beispielsweise interpretiert Python ein Befehlszeilenargument standardmäßig als Programmnamen, aber mit der -cOption können Sie ein Programm in der Befehlszeile angeben (d. h. die Standardeinstellung ist bei umgekehrt awk).

Unabhängig davon erfolgt die Kommunikation über Pipes. Das wird von der Shell-Syntax und dem Betriebssystem übernommen, das einzige, was Ihr Skript tun muss, ist, in stdout zu schreiben bzw. von stdin zu lesen. awkProgramme können also über Pipes kommunizieren.

Antwort2

Genau genommen, wenn Sie anrufenawk, beziehen Sie sich auf den Interpreter, nicht auf die Sprache. Die Sprache heißtAWK.

awk(oder mawk, ) ist nur ein Dienstprogramm, das in einer Programmiersprache nawkgeschriebene Programme ausführt .AWK

Wie POSIX definiert,Awk-ProgrammIst:

Programm

Wenn keine Option -f angegeben ist, muss der erste Operand für awk der Text des awk-Programms sein. Die Anwendung muss den Programmoperanden als einzelnes Argument an awk übergeben. Wenn der Text nicht mit einem endet, interpretiert awk den Text so, als ob er mit einem endet.

Wenn Sie diese Option also nicht verwenden -f, können Sie zwei Ihrer Beispiele als AWK-Programme betrachten.

verwandte Informationen