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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

awk 小结

發布時間:2025/1/21 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 awk 小结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

awk

是一個強大的文本分析工具,相對于grep的查找,sed的編輯,awk在其對數據分析并生成報告時,顯得尤為強大。簡單來說awk就是把文件逐行的讀入,以空格為默認分隔符將每行切片,切開的部分再進行各種分析處理。

參數:
-F fs?????????????? 指定行中分隔數據字段分隔符
-f file???????????? 指定讀取程序的文件名
-v var=value??????? 定義awk程序中的一個變量及其默認值
-mf N?????????????? 指定要處理的數據文件中的最大字段數
-mr N?????????????? 指定數據文件中的最大數據行數
-W keyword????????? 指定awk的兼容模式或警告等級

例子:
# cat awk.txt
data11,data12,data13,data14,data15
data21,data22,data23,data24,data25
data31,data32,data33,data34,data35

指定分隔符,打印第一行
# awk -F'[,]' '{print $1}' awk.txt
data11
data21
data31
取出網卡的IP地址,指定兩個分隔符
# ifconfig eth0|awk NR==2|awk -F'[: ]+' '{print $4}'
192.168.1.2
# ifconfig eth0 |awk -F '[ :]+' 'NR==2 {print $4}'
192.168.1.2

使用變量:
1、字段和數據行分隔符變量
$1、$2、$3:分別表示第一行、第二行、第三行
$NF???????????? 最后一列
$(NF-1)???????? 倒數第二列
NF????????????? 數據文件中的字段總數
NR????????????? 已處理的輸入數據行數目,行號

FIELDWIDTHS???? 由空格分隔開的定義了每個數據字段確切寬度的一列數字
FS????????????? 輸入字段分隔符
RS????????????? 輸入數據行分隔符
OFS???????????? 輸出字段分隔符
ORS???????????? 輸出數據行分隔符

例子:
# cat awk.txt
data11,data12,data13,data14,data15
data21,data22,data23,data24,data25
data31,data32,data33,data34,data35
1.指定分隔符號,打印出前三列
# awk 'BEGIN{FS=","} {print $1,$2,$3}' awk.txt
data11 data12 data13
data21 data22 data23
data31 data32 data33
2.替換指定分隔符,打印前三列
# awk 'BEGIN{FS=",";OFS="-"} {print $1,$2,$3}' awk.txt
data11-data12-data13
data21-data22-data23
data31-data32-data33
3.FIELDWIDTHS變量允許讀取數據行,而不用字段分隔符來劃分字段。在一些應用程序中,不用字段符,數據是被放置在數據行的某些列中。在這種情況下,你必須設定FIELDWIDTHS變量來匹配數據在數據行中的位置。這里是根據提供的字段寬度大小來計算字段。
# cat awksum.txt
1005.3247596.37
115-2.349194.00
05810.1298100.1

# awk 'BEGIN{FIELDWIDTHS="3 5 2 5"}{print $1,$2,$3,$4}' awksum.txt
100 5.324 75 96.37
115 -2.34 91 94.00
058 10.12 98 100.1
# awk 'BEGIN{FIELDWIDTHS="3 5 3 9"}{print $1,$2,$3,$4}' awksum.txt
100 5.324 759 6.37
115 -2.34 919 4.00
058 10.12 981 00.1
# awk 'BEGIN{FIELDWIDTHS="4 5 3 9"}{print $1,$2,$3,$4}' awksum.txt
1005 .3247 596 .37
115- 2.349 194 .00
0581 0.129 810 0.1

顯示/etc/passwd文件中有多少行
# awk '{print NR}' /etc/passwd

awk使用案例:
統計同一個IP的訪問量,以下是文件
# cat access.log
10.0.0.41 - - [03/Dec/2010:23:27:01 +0800] "HEAD /checkstatus.jsp HTTP/1.0" 200 -
10.0.0.43 - - [03/Dec/2010:23:27:01 +0800] "HEAD /checkstatus.jsp HTTP/1.0" 200 -
10.0.0.42 - - [03/Dec/2010:23:27:01 +0800] "HEAD /checkstatus.jsp HTTP/1.0" 200 -
10.0.0.46 - - [03/Dec/2010:23:27:02 +0800] "HEAD /checkstatus.jsp HTTP/1.0" 200 -
10.0.0.42 - - [03/Dec/2010:23:27:02 +0800] "HEAD /checkstatus.jsp HTTP/1.0" 200 -
10.0.0.47 - - [03/Dec/2010:23:27:02 +0800] "HEAD /checkstatus.jsp HTTP/1.0" 200 -
10.0.0.41 - - [03/Dec/2010:23:27:02 +0800] "HEAD /checkstatus.jsp HTTP/1.0" 200 -
10.0.0.47 - - [03/Dec/2010:23:27:02 +0800] "HEAD /checkstatus.jsp HTTP/1.0" 200 -
10.0.0.41 - - [03/Dec/2010:23:27:03 +0800] "HEAD /checkstatus.jsp HTTP/1.0" 200 -
10.0.0.46 - - [03/Dec/2010:23:27:03 +0800] "HEAD /checkstatus.jsp HTTP/1.0" 200 -
以下這是效果
# awk '{print $1}' access.log |sort|uniq -c|sort -nr -k1
????? 3 10.0.0.41
????? 2 10.0.0.47
????? 2 10.0.0.46
????? 2 10.0.0.42
????? 1 10.0.0.43

轉載于:https://blog.51cto.com/eveday/1690582

總結

以上是生活随笔為你收集整理的awk 小结的全部內容,希望文章能夠幫你解決所遇到的問題。

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