日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

awk 截取部分字符串_linux三剑客-awk

發布時間:2024/1/23 linux 68 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。