與sed相比,awk支持分段功能正則表達式
1) 實現打印指定分隔符分割後的第一段spa
# awk -F ':' '{print $1}' 文件名字符串
上述操做不會更改文件內容test
2) 實現打印指定分隔符分割後的全部段awk
# awk -F ':' '{print $0}' 文件名變量
# awk '{print $0}' 文件名 //與cat命令實現的功能一致,若是awk命令沒有指定分隔符,則默認空格或空白字符爲分隔符進行打印操做sed
3) 實現打印指定分隔符分割後的指定多個段循環
# awk -F '分隔符' ‘{print $1,$2,$4}’ 文件名im
4)給打印出來的內容指定分隔符圖表
# awk -F ‘:’ ‘{print $1"#"$2"#"$4}’ 文件名
1)匹配到指定字符串
# awk '/字符串/' 文件名
2)匹配指定段包含指定字符串的行
# awk -F ':' '$1 ~ /oo/' 文件名
3)匹配正則表達式
# awk -F ':' '$1 ~ /o+/' 文件名
4)支持多個表達式
# awk -F ':' '/root/ {print $1,$3} /user/ {print $1,$3,$4}' test.txt
上圖表示既要打印包含root的行的第一段和第三段,又要打印包含user的行的第一段第三段第四段
# awk -F ':' '/root|user/ {print $0}' 文件名
上圖表示打印出包含root或user的行的內容
5)值比較
# awk -F ':' '$3==0' test.txt //打印出指定段的值等於指定值的行
# awk -F ':' '$3==11 {print $1}' 文件名 //打印出指定段的值等於指定值的行的指定段
# awk -F ':' '$3>=」11「 {print $1}' 文件名 //打印出指定段的值大於等於指定字符串的ASCLL碼的行的指定段
在上圖中,數值11使用雙引號括起來表示11看作字符串,使用11的ASCLL碼值去作比較,說明2的ASCLL碼值大於1,依此類推
# awk -F ':' '$7!="/sbin/nologin" {print $0}' test.txt
上圖表示打印出第七段不等於指定字符串的ASCLL碼值的行
1)兩個段比較大小
# awk -F ':' '$3<$4' test.txt
上圖表示將第三段值小於第四段值的行打印出來
# awk -F ':' '$3==$4' 文件名
上圖表示將第三段值等於第四段值的行打印出來
# awk -F ':' '$3>"5" && $3<"7"' test.txt
上圖表示將第三段值大於5且小於7的行打印出來
# awk -F ':' '$3>100 || $7=="/sbin/nologin"' test.txt
上圖表示將第三段值大於100或第七段值等於指定字符串的行打印出來
2)指定打印匹配符
# awk -F ':' '{OFS="#"} {print $1,$2,$4}' test.txt
上圖中指定打印出來的第一第二第四段的分隔符爲#,須要注意的是OFS要寫在單引號的最前面
# awk -F ':' '{OFS="#"} {if($3>10) {print $1,$2,$4}}' test.txt
# awk -F ':' '{OFS="#"} $3>10 {print $1,$2,$4}' test.txt //這兩條命令運行結果相同
3)兩個內置變量NF NR
NF 表示段號, NR表示行號 ,均爲數字
# awk -F ':' '{print NR":"$0}' test.txt //將每行的行號打印在行首
# awk -F ':' '{print NF":"$0}' test.txt //將每行的段的總數打印在行首
# awk -F ':' 'NR<=10 && $1 ~ /root|sync/' test.txt // 將行號做爲判斷條件
上圖表示打印行號小於等於10且第一段包含指定字符串的行
# awk -F ':' 'NF==7 && $1 ~ /root|sync/' test.txt
上圖表示打印有7段且第一段包含指定字符串的行
# awk -F ':' '{print $NR":"$NF}' test.txt
上圖至關於循環打印了第一行的第一段:最後一段、第二行的第2段:最後一段、第三行的第三段:最後一段、依此類推
4)賦值操做
# head -3 test.txt |awk -F ':' '$1="root"'
上圖表示將文件前3行的第一段賦值爲root,注意賦值操做後分隔符如不指定則默認爲空格
# awk -F ':' '{tot=tot+$3}; END {print tot}' test.txt
上圖中tot默認初始值爲0,命令含義是將每行的第3段值循環相加並存放到tot中,直到最後打印tot的值