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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【拔刀吧少年】之awk文本和数据处理编程语言

發布時間:2024/9/3 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【拔刀吧少年】之awk文本和数据处理编程语言 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

AWK

  • 1. 什么是awk
  • 2. 基本格式
  • 3. 工作原理
  • 4. 常見的內建變量(可直接用)
  • 5. 按行輸出文本
  • 6. 按字段輸出文本
  • 7. 通過管道、雙引號調用shell命令
  • 8. 小案例 :awk集合getline、數組的用法

1. 什么是awk

AWK 是一種處理文本文件的語言,是一個強大的文本分析工具。
之所以叫 AWK 是因為其取了三位創始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。
相較于sed常常作用于一整個行的處理,awk則比較傾向于一行當中分成數個字段來處理,因為awk相當適合小型的文本數據。

2. 基本格式

awk后面接兩個單引號并加上大括號{ }來設置想要對數據進行的處理操作,awk可以處理后續接的文件,也可以讀取來自前個命令的標準輸,但如果awk主要是處理每一行的字段內的數據時,默認的字段分隔符為“空格鍵”或“Tab鍵”

3. 工作原理

逐行讀取文本,默認以空格或tab鍵為分隔符進行分隔,將分隔所得的各個字段保存到內建變量中, 并按模式或者條件執行編輯命令。
sed命令常用于一整行的處理,而awk比較傾向于將一行分成多個"字段"然后再進行處理。awk信息的讀入也是逐行讀取的,執行結果可以通過print的功能將字段數據打印顯示。在使用awk命令的過程中,可以使用邏輯操作符"&&“表示"與”、"“表示"或”、"!“表示"非”;還可以進行簡單的數學運算,如+、-、*、/、%、^分別表示加、減、乘、除、取余和乘方。

4. 常見的內建變量(可直接用)

FS∶ 列分割符。指定每行文本的字段分隔符,默認為空格或制表位。與"-F"作用相同
NF∶ 當前處理的行的字段個數。
NR∶ 當前處理的行的行號(序數)。
$0∶當前處理的行的整行內容。
$n∶ 當前處理行的第n個字段(第n列)。
FILENAME∶ 被處理的文件名。
RS∶ 行分隔符。awk從文件上讀取資料時,將根據RS的定義把資料切割成許多條記錄,而awk一次僅讀入一條記錄,以進行處理。預設值是’\n’
FNR:awk當前讀取的記錄數,其變量值小于等于NR(比如當讀取第二個文件時,FNR是從0開始重新計數,而NR不會)。
NR==FNR:用于在讀取兩個或兩個以上的文件時,判斷是不是在讀取第一個文件。

5. 按行輸出文本

實例1:輸出全部內容

實例2:輸出第1到第3行的內容

實例3:輸出第1行和第3行的內容,輸出奇數和偶數行,像sed -n ‘n;p’

實例4:輸出包含指定字符的行

實例5:輸出包含指定字符的行并統計有多行
分析:
BEGIN模式表示,在處理指定的文本之前,需要先執行BEGIN模式中指定的動作;
awk再處理指定的文本,之后再執行END模式中指定的動作;
END{ } 語句塊中,往往會放入打印結果等語句。

6. 按字段輸出文本

實例1:輸出指定分隔符的指定字段

實例2:輸出指定字段在指定范圍內的行,并選擇輸出的字段

實例3:awk結合三元運算符的使用。

實例4:輸出行和內容

實例5:輸出指定字段中包含指定字符的行,然后輸出指定字段。

7. 通過管道、雙引號調用shell命令

實例1:輸出文本內容,結合awk以指定字符為分隔符,然后統計出行數。

實例2:awk結合管道命令使用

實例3:查看當前內存使用百分比

實例4:查看當前系統的CPU的空閑率

實例5:顯示上次系統重啟的時間

8. 小案例 :awk集合getline、數組的用法

案例1:統計在線用戶的數量
分析:
當getline左右無重定向符“<”或“1”時,awk首先讀取到了第一行,就是1,然后getline, 就得到了1下面的第二行,就是2,因為getline之后,awk會改變對應的NF, NR,FNR和$0等 內部變量,所以此時的$0的值就不再是1,而是2了,然后將它打印出來。
當getline左右有重定向符“<”或“I”時,getline則作用 于定向輸入文件,由于該文件是剛打開,并沒有被awk讀入一行,只是getline讀入那么getline返回的是該文件的第一行, 而不是隔行。

案例2:分別顯示0到10的奇數和偶數行

案例3:指定分隔符來分隔字符串
$1=$1是用來激活$0的重新賦值,也就是說
字段$1…和字段數NF的改變會促使awk重新計算$0的值,通常是在改變OFS后而需要輸出$0時這樣做

案例4:使用awk創建數組,并循環

案例5:使用awk來統計httpd訪問日志中每個客戶端IP出現的次數,超過三次進行提示。
awk ‘/Failed password/ {ip[$11]++}; END {for(i in ip){print i,ip[i]}}’ /var/log/secure
1.先測試好提取ip和次數的正確命令,方便我們直接在腳本里面使用。

2.根據第一步的命令再次使用awk進行ip和次數的提取,然后做個if判斷即可。

3.測試結果

總結

以上是生活随笔為你收集整理的【拔刀吧少年】之awk文本和数据处理编程语言的全部內容,希望文章能夠幫你解決所遇到的問題。

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