5分鐘入門AWK
AWK是Linux上卓越的文字處理工具,它具有非常簡單的語法結構,擁有強大的文字處理能力。AWK 是一種解釋執行的程式語言,AWK 的名稱是由它們設計者的名字縮寫而來 —— Afred Aho, Peter Weinberger 與 Brian Kernighan。
目前總共有如下幾種不同的 AWK 版本。
AWK——這個版本是 AWK 最原初的版本,它由 AT&T 實驗室開發。
NAWK ——NAWK(New AWK)是 AWK 的改進增強版本。
GAWK—— GAWK 即 GNU AWK,所有的 GNU/Linux 發行版都包括 GAWK,且 GAWK 完全相容 AWK 與 NAWK。
AWK 可以做非常多的工作。 下面只是其中部分 AWK 的典型應用場景:
文字處理,
生成格式化的文字報告,
進行算術運算,
字串操作,以及其它更多。
linux 預設安裝了gawk,使用which gawk,如果輸出/bin/gawk,說明已經安裝了gawk,否則需要我們安裝,可以使用 yum 包管理工具安裝:
[root]# yum install gawk
另外我們也可以通過原始碼編譯的方式安裝gawk:
step 1——從可信的源下載原始碼。可以在命令列使用 wget 命令下載。
[jerry]$ wget http://ftp.gnu.org/gnu/gawk/gawk-4.1.1.tar.xz
step 2——解壓並提取下載的原始碼。
[jerry]$ tar xvf gawk-4.1.1.tar.xz
step 3——切換至解壓後的目錄並執行 configure 命令
[jerry]$ ./configure
step 4——configure 命令成功執行後會生成一個 Makefile 檔案。 接下來使用 make 命令編譯原始碼。
[jerry]$ make
step 5——你可以執行測試工具保證 build 是乾淨的。 這一步是可選的。
[jerry]$ make check
step 6——最後一步,安裝 AWK。 安裝前請確認你有超級使用者的許可權。
[jerry]$ sudo make install
通過以上六個步驟,你就成功地編譯並安裝了 AWK。 你可以通過如下的命令來確認 awk 安裝成功:
gawk的版本通過: gawk –version 檢視
[jerry]$ which awk
執行上面的命令,你將會得到如下的結果:
/usr/bin/awk
awk的工作流程:
讀( Read )、執 行( Execute )與重複( Repeat )
讀入一行執行一行,直到檔案末尾。
gawk的程式結構:
開始塊(BEGIN block),以大寫BEGIN開頭,必須大寫,這一部分是可選的,可有可無。如:
BEGIN {awk-commands}
主體塊(Body Block),如:
/pattern/ {awk-commands}
結束塊(END Block),以大寫END結束,必須大寫,這一部分是可選的,可有可無。如:
END {awk-commands}
awk的整體語法格式是: awk `/pattern/ {action}` file
其中單引號是為了和shell命令區分開;
/pattern/ 是一個過濾器,匹配這個模式的行才會被action的命令處理;
{}是一個命令組,action是具體執行的命令;
file是要處理的檔案
其中/pattern/ 和{action}必須要有一個,
awk可以直接在命令列執行執行命令,也可以通過編寫好指令碼,然後執行指令碼。
通過命令列的方式:
輸出marks.txt檔案的內容:
[jerry]$ awk `{print}` marks.txt
再比如輸出tomcat日誌:
gawk `{print}` /usr/local/apache-tomcat-8.0.30/logs/catalina.out
另外一種提供 AWK 命令的方式——通過指令碼檔案提供:
awk [option] -f file ….
首先,建立一個文字檔案 command.awk,在檔案中輸入如下 AWK 命令:
{print}
現在,我們可以呼叫 AWK 從文字檔案中讀入命令並執行。這裡,我們實現了與上面例子相同的效果:
[jerry]$ awk -f command.awk marks.txt
awk有一些標準選項:
-v 選項
這個選項可以為變數賦值。它允許在程式執行之前為變數賦值。下面是一個 -v 選項使用的示例程式:
[jerry]$ awk -v name=Jerry `BEGIN{printf “Name = %s
“, name}`
執行上面的命令可以得到如下的結果:
Name = Jerry
–dump-variables[=file] 選項
此選項會將全域性變數及相應值按序輸出到指定檔案中。預設的輸出檔名是 awkvars.out。
[jerry]$ awk –dump-variables “
[jerry]$ cat awkvars.out
awk的基本使用示例:
預設情況下,如果某行與模式串匹配,AWK 會將整行輸出:
[jerry]$ awk `/a/ {print}` marks.txt
這個輸出marks.txt檔案中匹配 a 字元的所在行。
輸出某一列,比如輸出第三列:
[jerry]$ awk `/a/ {print $3}` marks.txt
統計模式串成功匹配的次數,並將該結果列印出來:
[jerry]$ awk `/JVM/ {++count} END {print count }` catalina.out
輸出字元數多於 18 的行:
[jerry]$ awk `length($0) > 18` marks.txt
查詢檔案中匹配的字元:
awk `/uid=10001/` catalina.out
在catalina.out檔案中找匹配uid=10001的行,和 grep類似的功能。
awk `/uid=10*/` catalina.out
awk陣列操作,比如刪除陣列的元素:
[jerry]$ awk `BEGIN {
fruits[“mango”]=”yellow”;
fruits[“orange”]=”orange”;
delete fruits[“orange”];
print fruits[“orange”]
}`
awk的邏輯語言ifelse:
[jerry]$ awk `BEGIN {
a=30;
if (a==10)
print “a = 10”;
else if (a == 20)
print “a = 20”;
else if (a == 30)
print “a = 30”;
}`
awk的迴圈:
[jerry]$ awk `BEGIN { for (i = 1; i <= 5; ++i) print i }`
[jerry]$ awk `BEGIN {i = 1; while (i < 6) { print i; ++i } }`
awk裡面有很多內建函式,數學函式,字串函式,日期函式等。
還可以自定義函式。
awk也可以把輸出重定向到檔案:
[jerry]$ awk `BEGIN { print “Hello, World !!!” > “/tmp/message.txt” }`
>> 雙大於號是追加。
awk也可以使用管道:
[jerry]$ awk `BEGIN { print “hello, world !!!” | “tr [a-z] [A-Z]” }`
相關文章
- awk 入門教程
- awk 入門 —— 強大的文字分析工具
- Linux三劍客之awk入門指引Linux
- 30分鐘入門MyBatisMyBatis
- 五分鐘入門 Dingo APIGoAPI
- 20分鐘gulp快速入門
- 【譯】30 分鐘入門 TypescriptTypeScript
- 五分鐘入門雙拼!
- 一分鐘sed入門(一分鐘系列)
- 30 分鐘快速入門 Docker 教程Docker
- 十分鐘快速入門 PythonPython
- 5分鐘入門 next13
- 3分鐘入門lambda表示式
- 三分鐘爬蟲入門爬蟲
- 5分鐘帶你瞭解Linux awk命令!Linux
- tendermint區塊鏈五分鐘入門區塊鏈
- 10 分鐘快速入門:HTTP快取HTTP快取
- 5分鐘入門git模式開發Git模式
- 10分鐘快速入門rollup.jsJS
- 爬蟲程式十分鐘入門爬蟲
- Python語言如何入門?這篇文章讓你5分鐘入門Python!Python
- 40分鐘快速入門Dart基礎(中)Dart
- 40分鐘快速入門Dart基礎(下)Dart
- Dart語言——45分鐘快速入門(下)Dart
- Dart語言——45分鐘快速入門(上)Dart
- [入門到吐槽系列] Webix 10分鐘入門 一 管理後臺製作Web
- [入門到吐槽系列] Webix 10分鐘入門 二 表單Form的使用WebORM
- 5分鐘帶你入門apicloud,開發appAPICloudAPP
- numpy 基礎入門 - 30分鐘學會numpy
- 10分鐘go crawler colly從入門到精通Go
- 5分鐘入門MP4檔案格式
- 10分鐘極速入門dash應用開發
- Seaborn5 分鐘入門 (二)——barplot&countplot&pointplot
- 5分鐘帶你快速入門和了解 OAM Kubernetes
- Android 3分鐘帶你入門開發測試Android
- 3分鐘短文:Laravel控制器用法光速入門Laravel
- 一分鐘學awk夠用(產品經理都懂了)
- Spring Cloud超簡單十分鐘入門例項SpringCloud