AWK是一種程式設計語言。AWK 有幾種實作方式(主要以解釋器的形式)。AWK已被編入POSIX中。今天使用的主要實作是:
- nawk(“ new awk”,oawk原始UNIX實作的演變),已在* BSD上使用,并在Linux上廣泛使用;
- mawk,主要是堅持标準功能的快速實作;
- gawk,GNU實作,具有許多擴充;
- 在 Busybox的(小,适用于嵌入式系統,功能也不多)。
如果您隻關心标準功能,請緻電awk,它可以是gawk或nawk或mawk或其他實作。如果要使用GNU awk中的功能,請使用gawk或Perl或Python。
我的了解是: awk是将文本逐行篩選, 再将篩選行按(用
-F
指定的)
分割符
拆分成多列, 進行處理
基本格式
awk [選項] # 可以沒有
'單引号開始
BEGIN{ BEGIN語句塊代碼 }
/表達式/{表達式語句塊代碼}
/表達式2/{表達式語句塊代碼}
/表達式n/{表達式語句塊代碼}
END{END語句塊代碼}
單引号結束'
檔案1,檔案2...檔案n # 如果有表達式塊,就要有輸入, 輸入可以用重定向或檔案 , 檔案不能寫在單引号内
隻用BEGIN{}語句塊的話,可以不要輸入流, 否則都要有輸入流
幾種簡單用法
例1 : 檢視包含"root"字元串的行
sudo awk /root/{print} /etc/passwd
👆效果如同👇
sudo grep root /etc/passwd
👆效果如同👇
sudo awk '/root/{print $0}' /etc/passwd
例2
如果語句塊中有空格,就要用引号包住
例3
例4
echo -e "world\n你" | awk '
BEGIN { print "hello " }
/wo/{print}
/你/{print}
END { print "好" }
'
例5
awk '
BEGIN{print "hello"} BEGIN{print "world"}
BEGIN{print "世界"} BEGIN{print "你好"}
'
例6 : print 等效 print $0
sudo awk /root/{print} /etc/passwd
sudo awk '/root/{print $0}' /etc/passwd
選項
POSIX options: GNU long options: (standard)
-f progfile --file=progfile
-F fs --field-separator=fs
-v var=val --assign=var=val
Short options: GNU long options: (extensions)
-b --characters-as-bytes
-c --traditional
-C --copyright
-d[file] --dump-variables[=file]
-D[file] --debug[=file]
-e ‘program-text’ --source=‘program-text’
-E file --exec=file
-g --gen-pot
-h --help
-i includefile --include=includefile
-l library --load=library
-L[fatal|invalid|no-ext] --lint[=fatal|invalid|no-ext]
-M --bignum
-N --use-lc-numeric
-n --non-decimal-data
-o[file] --pretty-print[=file]
-O --optimize
-p[file] --profile[=file]
-P --posix
-r --re-interval
-s --no-optimize
-S --sandbox
-t --lint-old
-V --version
4個好記的常用選項: 大F , 小f , 大V , 小v
-
指定分隔符, 不指定的話, 預設是 空格 和 tab(\t)-F
-
指定檔案, 可以省略, 檔案路徑全名寫在最後即可-f
-
指定awk自己的變量-v
-
檢視版本-V
awk , nawk , mawk , gawk
awk 是一種程式設計語言,用于在linux/unix下對文本和資料進行處理。資料可以來自标準輸入、一個或多個檔案,或其它指令的輸出(即管道)。它支援使用者自定義函數和 動态正規表達式等先進功能,是linux/unix下的一個強大程式設計工具。它在指令行中使用,但更多是作為腳本來使用。
awk的處理文本和資料的方式是這 樣的,它逐行掃描檔案,從第一行到最後一行,尋找比對的特定模式的行,并在這些行上進行你想要的操作。如果沒有指定處理動作,則把比對的行顯示到标準輸出 (螢幕),即預設處理動作是print;如果沒有指定模式,則所有被操作所指定的行都被處理,即預設指定模式是全部。awk分别代表其作者姓氏的第一個字母。因為它的作者是三個人,分别是Alfred Aho、Brian Kernighan、Peter Weinberger。gawk是awk的GNU版本,它提供了Bell實驗室和GNU的一些擴充。
像shell一樣,awk也有好幾種,常見的如awk、nawk、mawk、gawk,其中
awk:最初在1 9 7 7年完成,1 9 8 5年發表了一個新版本的awk,它的功能比舊版本增強了不少,awk 能夠用很短的程式對文檔裡的資料做修改、比較、提取、列印等處理,如果使用C 或P a s c a l 等語言編寫程式完成上述的任務會十分不友善而且很花費時間,所寫的程式也會很大;
nawk: 在 20 世紀 80 年代中期,對 awk語言進行了更新,并不同程度地使用一種稱為 nawk(new awk) 的增強版本對其進行了替換。許多系統中仍然存在着舊的awk 解釋器,但通常将其安裝為 oawk (old awk) 指令,而 nawk 解釋器則安裝為主要的 awk 指令,也可以使用 nawk 指令。Dr. Kernighan 仍然在對 nawk 進行維護,與 gawk 一樣,它也是開放源代碼的,并且可以免費獲得;
mawk:mawk 是 awk 程式設計語言的解釋器。awk語言在多媒體資料檔案以及文本的檢索和處理,算法的原型設計和試驗都有廣泛的使用。mawk帶給awk新的概念,它實作了在《The AWK Programming Language》(Aho, Kernighan and Weinberger, The AWK Programming Language, Addison-Wesley Publishing, 1988.被認為是 AWK 手冊。)中定義的 awk語言。mawk遵循 POSIX 1003.2 (草案 11.3)定義的 AWK 語言,包含了一些沒有在AWK 手冊中提到的特色,同時 mawk 提供一小部分擴充,另外據說mawk是實作最快的awk;
gawk: 是 GNU Project 的awk解釋器的開放源代碼實作。盡管早期的 GAWK 發行版是舊的 AWK 的替代程式,但不斷地對其進行了更新,以包含 NAWK 的特性;
目前,大家都比較傾向于使用awk和gawk,
- Ubuntu系統中的各種awk的選項設定,可以通過sudo update-alternatives --config awk來完成,實際上你通過手動修改軟連結也能實作。
- Debian最小化安裝的時候awk的連結是指向mawk的。