一.awk語法
awk [options] 'commands' files
option
-f 定義字段分隔符,預設的分隔符是連續的空格或製表符
使用option中的-f引數定義間隔符號
用$1,$2,$3等的順序表示files中每行以間隔符號分隔的各列不同域
nf變數表示當前記錄的字段數
-v 定義變數並賦值 也可以借用次方式從shell變數中引入
二.變數
變數命名規則
以字母或下劃線開頭,剩下的部分可以是:字母、數字、下劃線.
最好遵循下述規範:
1.以字母開頭
2.使用中劃線或者下劃線做單詞的連線
3.同型別的用數字區分
4.對於檔案最好加上拓展名
nr 表示awk讀入的行數
fnr表示讀入行所在檔案中的行數
# awk '' file1 file2
1 1 aaaaa
2 2 bbbbb
3 3 ccccc
4 1 dddddd
5 2 eeeeee
6 3 ffffff
#邏輯運算 可直接引用域進行運算
== >= <= != > < ~ !~
# awk 'nr==1 ' /etc/passwd
root:x:0:0:root:/root:/bin/bash
# 命令
讀後處理 end
nr 當前記錄的個數(全部檔案連線後的統計)
fnr 當前記錄的個數(僅為當前檔案的統計,非全部)
fs 字段分隔符 預設為連續空格或製表符,可以使用多個不同的符號做分隔符 -f[:/]
ofs 輸出字元的分隔符 預設是空格
# awk -f: 'ofs="*****" ' /etc/passwd
root*****x
nf 當前讀入行的字段個數
ors 輸出記錄分隔符 預設是換行
# awk -f: 'ors="*****" ' /etc/passwd
root x*****bin x*****
filename 當前檔名
引用shell變數的方法
# a=root
# awk -v var=$a -f: '$1 == var ' /etc/passwd
或者 把整個命令拆開傳遞,讓shell變數外露,
# awk -f: '$1 == "'$a'" ' /etc/passwd
# a=nf
# awk -f: '' /etc/passwd
三.操作符
賦值= += -= /= *=
邏輯與 邏輯或 邏輯非
&& || !
匹配正則或不匹配,正則需要用 /正則/ 包圍住
~ !~
關係 比較字串時要把字串用雙引號引起來
< <= > >= != ==
字段引用
$ 字段引用需要加$,而變數引用直接用變數名取
運算子+ - * / % ++ --
轉義序列
\\ \自身
\$ 轉義$
\t 製表符
\b 退格符
\r 回車符
\n 換行符
\c 取消換行
四.if (條件) 動作
若有多個動作,則要用大括號將動作體包含起來 if (條件)
# awk -f: '' /etc/passwd
root
# # awk -f: '}' /etc/passwd
root
/root
#if (條件1)
動作1else
動作2# awk -f: 'else print $6}' /etc/passwd
# awk -f: '' /etc/passwd
上面兩個命令是等價的,要麼用分號隔開,表示第乙個動作體的結束,要麼將動作體用大括號定位範圍
if (條件 1)
動作1else if(條件 2)
動作2else if(條件 3)
動作3else
動作4# awk -f: '' /etc/passwd
root23
...33
/home/seker
/bin/bash
36條件 ? 動作1 : 動作2
expr?action1:action2
# awk -f: 'var=($3 >= 500)?$1:"system_user" ' /etc/passwd
# awk -f: '' /etc/passwd
Awk運算子使用
加 減 乘 除 取餘 小例項 begin等 賦值運算子 加等於 減等於 乘等於 除等於 取模等於 小例項 begin大於 大於等於 小於 小於等於 等等於 不等於 小例項 begin邏輯運算最後返回的都是1或0 與 或 非 小例項 1.返回false begin返回false begin返回true...
Awk關係運算子和布林運算子
awk關係運算子和布林運算子 awk關係運算子及其意義 運算子意義 小於 大於 小於等於 大於等於 等於 不等於 匹配正規表示式 不匹配正規表示式 awk布林運算子及其意義 運算子意義 邏輯或 邏輯與!邏輯非 示例 awk begin 1 root etc passwd 列印 etc passwd ...
運算子之位運算子
右移 負數 無符號右移 或 異或 與 非 說明 位運算子都是作用在二進位製上的 比如 n 50 n 1 結果是多少?100 n 2 結果是多少?200 n 5 結果是多少?1600 為什麼會是這樣的呢?運算的邏輯如下 1,n 50 2,n的二進位制是 0011 0010 3,0011 0010 左移...