什麼時候將 awk 解釋為命令或程式語言?

什麼時候將 awk 解釋為命令或程式語言?

我知道這awk是一種腳本程式語言,但有時我會對何時解釋為命令或程式感到困惑。

例如。 1-這裡我解釋為命令:

awk '{print $2}' file.txt

例如。 2-這裡我解釋為awk程序:

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

取自這裡

問題是:

  1. 什麼時候 awk 需要解釋為命令?
  2. awk何時是一個程序?
  3. 將我的第一個範例作為命令呼叫有問題嗎awk

就像是:

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

意味著awk程式可以使用管道進行通訊?

答案1

awk有兩種呼叫模式,一種是使用命令列上的程式文本,另一種是使用檔案中的程式。 awk 手冊頁的概要中對此進行了說明(手冊來自 Ubuntu 12.04 上的 mawk):

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

是否將第一個表單呼叫為程式取決於您要使用的程式的定義。我想說這兩種形式都涉及程序,其中第一種形式將程序指定為命令列參數。你的兩個例子都是第一種形式,因為都不涉及這個-f選項。就這一點而言,第二個範例具有多行命令列參數是無關緊要的。

這並不是 獨有的awk。例如,預設情況下,python 將命令列參數解釋為程式名稱,但使用該-c選項允許您在命令列上指定程式(即預設值與 相反awk)。

與此無關的是使用管道的通訊。這是由 shell 語法和作業系統處理的,您的腳本唯一需要做的就是寫入標準輸出,代表。從標準輸入讀取。所以是的,awk程式可以透過管道進行通訊。

答案2

嚴格來說,當你打電話時awk,你指的是口譯員,而不是語言。該語言稱為AWK

awk(或mawk, nawk) 只是實用程序,它將執行用AWK程式語言編寫的程序。

正如 POSIX 所定義的,awk程序是:

程式

如果未指定 -f 選項,則 awk 的第一個操作數應為 awk 程式的文字。應用程式應將程式操作數作為單一參數提供給 awk。如果文本不以 a 結尾,awk 將解釋該文本,就像它以 a 結尾一樣。

因此,如果您不使用-f選項,您可以將兩個範例視為 awk 程式。

相關內容