[[email protected] ~]# awk '條件1 {動作 1} 條件 2 {動作 2} …' 檔名
條件型別 | 條 件 | 說 明 |
---|---|---|
awk保留字 | BEGIN | 在 awk 程式一開始,尚未讀取任何資料之前執行。BEGIN 後的動作只在程式開始時執行一次 |
awk保留字 | END | 在 awk 程式處理完所有資料,即將結束時執行?END 後的動作只在程式結束時執行一次 |
關係運算子 | > | 大於 |
< | 小於 | |
>= | 大於等於 | |
<= | 小於等於 | |
== | 等於。用於判斷兩個值是否相等。如果是給變童賦值,則使用"=” | |
!= | 不等於 | |
A~B | 判斷字串 A 中是否包含能匹配 B 表示式的子字串 | |
A!~B | 判斷字串 A 中是否不包含能匹配 B 表示式的子字串 | |
正規表示式 | /正則/ | 如果在“//”中可以寫入字元,則也可以支援正規表示式 |
[[email protected] ~]# awk '{printf $2 "t" $6 "n"}' student.txt
#輸出第二列和第六列的內容
Name Average
Liming 87.66
Sc 85.66
Gao 91.66
[[email protected] ~]#df -h | awk '{print $1 "t" $3}'
檔案系統 已用
/dev/sda3 1.8G
tmpfs 0
/dev/sda1 26M
/dev/sr0 3.5G
[[email protected] ~]# awk 'BEGIN{printf "This is a transcriptn"}
{printf $2 "t" $6 "n"}' student.txt
#awk命令只要檢測不到完整的單引號就不會執行,所以這條命令的換行不用加入"",就是一行命令
#這裡定義了兩個動作
#第一個動作使用BEGIN條件,所以會在讀入檔案資料前列印"這是一張成績單"(只會執行一次)
#第二個動作會列印檔案的第二個欄位和第六個欄位
This is a transcript
Name Average
Liming 87.66
Sc 85.66
Gao 91.66
[[email protected] ~]# awk 'END{printf "The End n"}
{printf $2 "t" $6 "n"}' student.txt
#輸出結尾輸入"The End",這並不是文件本身的內容,而且只會執行一次
Name Average
Liming 87.66
Sc 85.66
Gao 91.66
The End
[[email protected] ~]# cat student.txt | grep -v Name |awk'$6 >= 87 {printf $2'n"}'
#使用cat輸出檔案內容,用grep取反包含"Name"的行
#判斷第六個欄位(平均成績)大於等於87分的行,如果判斷式成立,則列印第六列(學員名)
Liming
Gao
[[email protected] ~]# awk'$2 -/Sc/ {printf $6 "n"}' student.txt
#如果第二個欄位中包含"Sc"字元,則列印第六個欄位
85.66
[[email protected] ~]# awk '/Liming/ {print}' student.txt
#列印Liming的成績
1 Liming 82 95 86 87.66
[[email protected] ~]# df -h | awk '/sda[0-9]/ {printf $1 't $5 "n"}'
#查詢包含"sda數位"的行,並列印第一個欄位和第五個欄位
/dev/sda3 10%
/dev/sda1 15%
[[email protected] ~]# cat student.txt
ID Name PHP Linux MySQL Average
1 Liming 82 95 86 87.66
2 Sc 74 96 87 85.66
3 Gao 99 83 93 91.66
[[email protected] ~]# awk'NR==2{php1 =$3}
NR==3{php2=$3}
NR==4{php3= $3;totle=php1+php2+php3;print "totle php is" totle}' student.txt
#統計PHP成績的總分
totle php is 255
[[email protected] ~]# awk'{if (NR>=2)
{if ($4>90) printf $2" is a good man!n"}}' student.txt
#程式中有兩個if判斷,第一個判斷行號大於2,第二個判斷Linux成績大於90分
Liming is a good man!
Sc is a good man!
[[email protected] ~]# awk' NR>=2 {test=$4}
test>90 {printf $2" is a good man!n"}' student.txt
#先判斷行號,如果大於2,就把第四個欄位的值賦予變數test
#再判斷成績,如果test的值大於90分,就列印好男人
Liming is a good man!
Sc is a good man!