一、awk介紹正則表達式
全稱:Aho Weinberger Kernaighan 三我的的首字母縮寫shell
grep 行過濾器express
-o -i -v取反 -E正則表達式 grep egrep fgrep(匹配速度最快)數組
sed 行編輯器bash
-n p 一、地址定界 二、命令 p a i w c \ s/pat/str/ g|&編輯器
awk 報告生成器函數
經過模式匹配以及本身自己的語言格式,來獲取,並輸入工具
【默認狀況下,三個工具都不去編輯源文件】3d
FS=" "指定分隔符對象
二、awk原理
三、awk用法
awk 選項 ... 'program' file...
一、program 必須使用!單引號!
二、多條program語句使用大括號包含起來,能夠並列,能夠嵌套
awk '{print}' /etc/passwd
四、potion
-F 指定分隔符
awk -F[/:] '{print $1,$3}' a.txt
其中[ ]內表示多個字符中的任意一個
-v 由於awk是一種語言編輯器,能本身定義變量,同時也有內置變量(與環境變量相似)
手動指定變量參數
awk -v a="a/b" '{print }' a.txt
給a賦值,打印a這個變量
一、a是自定義變量 -v FS=":"
二、在awk中調用變量 不用加¥符號
awk '{a="a/b";print a}' a.txt
擴展: 瞭解cut 與awk的區別
五、awk本身的固定語法語句
一、print
默認輸出(在屏幕上)
在awk中沒有保存命令,咱們能夠關聯別的命令來保存awk的結果
awk '{a="a/b";print a}' a.txt | tee a.bak
二、printf ---實現格式化輸出
格式符
%s 字符串
%d %i 數值
%e %E 科學計算數值
%c Acsii碼值
%f 浮點數
%u 無符號整數
%% 逃逸符 只顯示%本身
修飾符
默認爲右對齊
- 表明左對齊
%5.4f
5 所佔位屬
4 所取小數位
三、變量(內置變量、自定義變量)
內置變量 ---環境變量(bash)(env、set -C +C)
awk語言所默認支持的變量
FS 定義輸入分隔符的變量
OFS 定義輸出分隔符的變量
NF 定義行分割之後的參數個數($NF 分割之後最後一列的變量)
變量引用的時候不用加$,$0,$1....$n
NR 定義文件的行數,定義多個文件的文件行,行號疊加
FNR 文集只計算本身的行號
begin{語句}只在行循環開始時,執行一次
ARGC 整個命令的段數 [注意:不包含'program'自己]
ARGV 數組,用來調用命令中,指定的段ARGV[2] 【注意:數組中也不包含'program'】
RS 指定換行符 \n能夠指定新的換行符,不影響自己的換行
ORS 輸出的時候指定的換行符,將默認換行符替換爲指定字符
自定義變量
-v 變量=值
在後面'program'中去調用自定義變量時,直接使用便可或者將「變量=值」語句直接寫 在’program‘亦可
四、模式匹配(地址定界)
一、空值、沒有定義,默認就將文本全部的行,放入awk進行循環
二、對固定的1,3行進行操做
sed -n '1,3p' /etc/passwd
awk '1,3{print}' /etc/passwd ///awk默認不支持1-3 1,3等等,這樣數值的直接寫法;
awk 'NR>=1&&NR<=3{print}' /etc/passwd //經過NR變量來指定
三、/pat1/
sed -n /pat1/p /etc/passwd
awk '/r..ter/{print}' /etc/passwd
四、/pat1/,/pat2/ 第一次匹配pat1到第一次匹配pat2,之間的行
五、模式匹配能夠直接使用判斷語句
awk -F:'$NF=="/bin/bash"{print $1,$3}' /etc/passwd
六、BEGIN在默認循環進行操做前所要執行的語句;
五、操做符
運算操做符:
+ - * / % ** // ^
比較運算符
== ! = > < >= <=
~!~
邏輯操做符
&& || !
賦值操做符:
= += -= /= *= %= ^= //=
條件表達式:
語句條件? 條件成立語句;條件 不成立的語句
六、常見action
print printf 以及他任何命令的操做都是action
一、expressions
二、control statement 控制語句 例如: if while等
邏輯關係語句判斷來進行結合
三、組合語句 compound statements
/pat1/{{ }{;}}
四、input statements輸入語句
五、output statements 輸出語句
七、常見語言(if while do for break continue )
一、if語句
語法格式:if(條件表達式){執行語句}
if(條件表達式){執行語句} else {執行語句}
awk '/^title/{if(NF<=2) {print}else {print "參數過少"}}' /boot/grup/grup.conf
awk '/^title/{if(NF>=2) print $4}' /boot/grup/grup.conf
二、while語句
只有對行參數進行遍歷的時候纔會使用循環;
語法格式:while(條件表達式){循環體}
八、數組
在awk中,數組和shell中的數組特性相同
注意:awk中數組不用定義,只要使用了,就有值爲空的默認數組;這在作數據統計的時候很是常見!!!!!
行遍歷 - --> 實際上就是整個文件的遍歷
列遍歷 ----> 取對象固定某列中的相同數據的統計
注意:數組經過for語句再給其餘變量進行賦值的時候,賦值的是index索引信息;
九、函數
一、內置函數
函數的調用:funcation(參數)
length() 統計字符串長度
數學運算上使用的函數 sin() cos().....
sub(x,x,x) 替換第一個匹配到的值
gsub(x,x,x) 替換該行所匹配道德全部值
split(x,x,x) 指定分隔符去切割文件
二、自定義函數