awk 截取部分字符串_linux三剑客-awk
經常操作日志的小伙伴們對awk命令肯定不陌生,awk工具給我們分析日志提供了很便捷的操作,幫助我們完成統計和分析日志,也有很多小伙伴不會用到awk。awk作為一個強大的工具,對于我們工作能力和工作效率的提升,都有很多幫助,下面就讓我們來領略一下awk的強大吧!
1.awk簡介
awk適合文本處理和報表生成,在linux系統日常處理工作中,發揮了重要的作用,awk是三劍客的老大,利刃出銷,必將不凡。
2.awk介紹
例如:awk '{print $0}' /etc/passwd
awk命令簡單使用
解釋:我們執行完上述命令之后,/etc/passwd文件的內容出現在眼前了。
在調用awk時,我們指定/etc/passwd為輸入文件。執行awk時,會依次對/etc/passwd中的每一行執行print命令。所有輸出都發送到stdout,所得到的結果和cat /etc/passwd相同。
再次強調:awk對輸入文件中的每一行都執行這個腳本。
簡單說明
例如:awk -F ":" '{print $1}' /etc/passwd
例如:awk -F ":" '{print $1 $3}' /etc/passwd
例如:awk -F ":" '{print $1 " " $3}' /etc/passwd
例如:awk -F ":" '{print "username:"$1 "uid:"$3}' /etc/passwd
3.BEGIN和END模塊
對于每個輸入行,awk都會執行每個腳本代碼塊一次。然而,在很多情況下,可能需要在awk開始輸入文件中的文本之前執行初始化代碼。對于這種情況,awk允許您定義一個BEGIN塊。awk在開始處理輸入文件之前會執行BEGIN塊,所以它是初始化FS(字段分隔符)變量、打印頁眉或初始化其他在程序中以后會引用的全局變量的最佳位置。
awk還提供了END模塊。awk在處理了輸入文件中的所有行之后執行這個塊。通常,END塊用于執行最終計算或打印應該出現在輸出流結尾的摘要信息。
4.運算符
awk運算符
例如:賦值運算符
awk 'BEGIN{a=5;a+=5;print a}'
賦值運算符示例
例如:邏輯運算符
awk 'BEGIN{a=1;b=2;print(a>2&&b>1,a=1||b>1)}'
邏輯運算符示例
例如:正則運算符
awk 'BEGIN{a="100testaaa"; if(a~/100/){print "ok"}}'
例如:關系運算符
說明:>
awk 'BEGIN{a="11";if(a>=9){print "ok"}}'
awk 'BEGIN{a=11;if(a>=9){print "ok"}}'
awk 'BEGIN{a;if(a>=b){print "ok"}}'
關系運算符示例
例如:算術運算符
說明:所有用作算術運算符進行操作,操作數自動轉為數值,所有非數值都變為0。
awk 'BEGIN{a="b";print a++, ++a}'
awk 'BEGIN{a="20b4";print a++, ++a}'
awk 'BEGIN{a="b";print a=="b"?"ok":"err"}'
awk 'BEGIN{a="b";print a=="c"?"ok":"err"}'
5.awk內置變量
awk內置變量
例如:字段分隔符FS
FS=""一個或多個Tab分隔
awk 'BEGIN{FS="+"}{print $1,$2,$3}' tab.txt
字段分隔符示例
FS="[[:space:]+]"一個或多個空白格
空白格示例
FS="["":]+"以一個或多個空格或:分隔
空白格示例
字段數量NF
字段數量示例
記錄數量NR
記錄數量示例
RS記錄分隔符變量
將FS設置成""告訴awk每個字段都占據一行。通過將RS設置成"",還會告訴awk每個地址記錄都由空白行分隔。
記錄分隔符變量示例
OFS輸出字段分隔符
輸出字段分隔符示例
ORS輸出記錄分隔符
輸出記錄分隔符示例
6.awk正則
正則示例
比如:規則表達式
awk '/REG/{action}' file,/REG/為正則表達式,可以將$0中,滿足條件的記錄送入到:action進行處理。
規則表達式示例
規則表達式示例
比如:布爾表達式
awk '布爾表達式{action}' file僅當對前面的布爾表達式求值為真時,awk才執行代碼塊。
布爾表達式示例
7.awk的if、循環和數組
比如:條件語句
條件語句示例
使用if語句還可以將代碼:
轉換為:
比如:循環結構
awk還有"do...while"循環,它在代碼塊結尾處對條件求值,而不像標準的while循環那樣在開始處求值。
循環結構示例
和一般的while循環不同,由于在代碼塊之后對條件求值,"do...while"循環永遠都至少執行一次。
比如:for循環
awk允許創建for循環,它就像while循環。
for循環示例
for簡短示例
上面代碼打印:
打印結果
比如:break和continue
awk提供了break和continue語句。使用這些語句可以更好的控制awk的循環結果。
死循環示例
break示例
break語句用于"逃出"最深層的循環。"break"使循環立即終止,并繼續執行循環代碼塊后面的語句。
continue語句補充了break。
continue中使用break示例
這段代碼打印"iteration1"到"iteration21","iteration4"除外。如果迭代等于4,則增加x并調用continue語句,該語句立即使awk開始執行下一個循環迭代,而不執行代碼塊的其余部分。如同break一樣,continue語句適合各種awk迭代循環。在for循環主體中使用時,continue將使循環控制變量自動增加。如下等價循環:
在while循環中時,在調用continue之前沒必要增加x,因為for循環會自動增加x。
比如:數組
awk中的數組都是關聯數組,數字索引也會轉變為字符串索引
for...in輸出,因為數組是關聯數組,默認是無序的。所以通過for...in得到無序的數組。如果需要得到有序數組,需要通過下標獲得。
比如:用awk中查看服務器連接狀態并匯總
比如:統計web日志訪問流量,要求輸出訪問次數,請求頁面或圖片,每個請求的總大小,總訪問流量的大小匯總。
8.awk常用字符串函數
比如:替換
比如:查找
比如:匹配查找
比如:截取
比如:分割
希望對大家有多多幫助,如果大家有什么不懂的知識點,可以在評論區留言,我會給大家一一講解!
總結
以上是生活随笔為你收集整理的awk 截取部分字符串_linux三剑客-awk的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python中lambda函数对时间排序
- 下一篇: linux自动化安装oracle,ftp