我知道這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}'
取自這裡。
問題是:
- 什麼時候 awk 需要解釋為命令?
- awk何時是一個程序?
- 將我的第一個範例作為命令呼叫有問題嗎
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
程式可以透過管道進行通訊。