「 awk 一般用於比較規範的檔案處理,是 sed 命令的補充。」
awk 指令碼的流程控制,主要包含三部分,第 1, 3 部分可忽略。
輸入資料前begin{}
,資料處理前做一些預處理工作。主迴圈{}
。所有檔案讀取完成end {}
。
每行稱作 awk 的記錄,預設使用空格、製表符分開,每個分開的單詞叫做字段。
在 awk 中使用使用$1 $2 ... $n
表示每乙個字段($0
表示整行)。
可以用-f
指定分隔符,分隔符也可以使用正規表示式。
awk -f ',' '' filename
示例:
[/tmp]$ cat a.log
a,b,c,d,e
1,2,3,4
a,2,c
# 正則過濾,然後給每行乙個編號,列印第二列
[/tmp]$ awk -f',' '/^[a-z]/' a.log
0 b1 2
# 更改輸入和輸出分隔符
[/tmp]$ awk 'begin' a.log
a-b-c
1-2-3
a-2-c
# 更改記錄分隔父
[/tmp]$ awk 'begin' a.logab
cde 12
34 a2c
# 顯示行號 fnr 多個檔案會重新計數
[/tmp]$ awk '' a.log
1 a,b,c,d,e
2 1,2,3,4
3 a,2,c
[/tmp]$ awk -f, '' a.log
5 a,b,c,d,e
4 1,2,3,4
3 a,2,c
這裡的條件和迴圈跟程式語言的格式差不多。
語法格式:
if( expression ) statement [ else statement ]
示例:grades.log 中存放的第一列學生名,後面每列是成績。
[/tmp]$ cat grades.log
user0 66 98 89 62 71
user1 63 93 70 93 85
user2 92 92 82 79 91
user3 91 77 83 63 74
user4 88 99 87 99 67
# if 內多個處理語句可以用 {} 括起來
[/tmp]$ awk '' grades.log
user2
user3
user4
條件過濾
# 等同於上面 if
[/tmp]$ awk '$2>80 ' grades.log
user2
user3
user4
[/tmp]$ awk '$2>90 && $3>90' grades.log
user2 92 92 82 79 91
# // 中間是正則
[/tmp]$ awk '$1 ~ /[a-z]+1/ ' grades.log
user1 63 93 70 93 85
while ( expr ) statement
do statement while ( expr )
for ( opt_expr ; opt_expr ; opt_expr ) statement
for ( var in array ) statement
示例:計算 grades.log 中每個學生的總成績和平均成績。
[/tmp]$ awk '' grades.log
user0 386 77.2
user1 404 80.8
user2 436 87.2
user3 388 77.6
user4 440 88
計算所有學生的平均值。
[/tmp]$ awk 'end' grades.log
82.16
這兩個引數主要在寫 shell 指令碼比較常用,比如要給 awk 傳入一些引數。
[/tmp]$ cat arg.awk
begin' grades.log
[/tmp]$ cat 80.log
user1 80.8
user2 87.2
user4 88
推薦閱讀
你所不知道的那些sed命令
awk 使用技巧
倉庫db oracle home dwetl perl script cbs awk begin 1.txt113 3倉庫db oracle home dwetl perl script cbs awk f 1.txt 113 3 fs 設定輸入域分割符 等價於命令列 f選項 預設是tab或者空格 ...
awk 高階技巧
netstat nat awk sort uniq c sort rn netstat n awk tcp end 或 netstat n awk tcp end netstat n awk tcp end netstat n awk tcp sort uniq c sort rn netstat ...
awk實戰3 awk陣列技巧
awk乙個神奇而又強大的功能,絕對是乙個開發利器,效率直選 希望這裡的一些總結能幫到那些存在困惑的人 awk實戰1 基礎語法說明 awk實戰2 流程控制語句總結 awk實戰3 awk陣列技巧 awk實戰4 函式系列 算數函式說明 awk實戰5 函式系列 基本字串函式 awk實戰6 函式系列 字串函式...