Linux awk基本使用

文章來源:王琦的個人博客-linux三劍客之awk ,互聯網打雜,喜歡多語言編程,記錄一些知識碎片,分享一些心得。

linux三劍客之awk,以字段爲單位進行處理數據的處理,統計。作爲開發人員也應熟練掌握

awk 命令參數

awk 參數 ‘模式{動作}’ 文件

1、-F "[ ]" ,以指定分隔符號分隔,也就是多個字段
2、print 打印輸出
3、$n 第n列
4、$0 表示一整行
5、NF列的數量
6、$NF 最後1列名稱


# NF當前列總數
# 打印第一行列總數
awk 'NR==1{print NF}' 

# $NF 表示最後1列的名稱,
awk '{print $NF}'

# -vOFS='\t' 輸出指定分割符 	
awk -vOFS="\t" '{NF=3}1'

# 打印1,3列
'{print $1,$3}' 顯示指定列

# 打印第1-10列
awk -vOFS='\t' '{NF=10}1'  


查找

awk '/php/' file	# 找出包含php的行

awk '/^$/{print NR}' file	# 查找空行	

awk '$2~/php/' file	# 查找第二列包含php的行	

awk '$3~/[15]$/{print $1}' file	# 以1或5結尾	

替換

# /目標/,"替換內容",(第幾列);print
awk '{gsub(/:/,"$",$4);print}' reg.txt 

特殊模式BEGIN END

END{}會在讀取完文件的最後一行執行

# 統計空行數量
awk '/^$/{i++}END{print i}' file 

awk數組

1、統計域名開頭出現的次數

https://www.hiwangqi.com

https://www.hiwangqi.com

https://post.hiwangqi.com/

https://mp3.hiwangqi.com/

https://post.hiwangqi.com/


awk -F "[/.]+" '{h[$2]++}END{print h["www"],h["post"]}' file

3 2

awk -F "[/.]+" '{h[$2]++}END{for(pol in h) print pol,h[pol] }' file

www 3
mp3 1
post 2

2、統計access.log中ip出現的次數並排序


awk '{f[$1]++}END{for(ip in f) print ip,f[ip]|"sort -nk2"}' ./access.log

sort

-n:按數值大小進行排序。

-k:按第幾列進行排序。

-r:逆序。

3、統計出secure文件中每個用戶和每個ipfailed錯誤的次數

# 內容: 
# Failed password for invalid user mashby from 120.52.120.166 port 47904 ssh2

awk '/Failed/{print $(NF-5), $(NF-3)}' /var/log/secure |sort|uniq -c|sort -n

# 顯示結果:
208 root 43.225.180.227
310 root 115.239.253.159
633 root 210.245.107.92

命令解釋:

$(NF-5):$NF表示最後一列,$(NF-3)則表示IP
srot:默認以ASCII 碼的次序排列,先進行排列,所有相同的行就會出現在相連的地方。
uniq -c:uniq用於去除相鄰位置的行例如。-c參數則用於在每列旁邊顯示該行重複出現的次數。

# sort前
aaaaaaa
ccccccc 
aaaaaaa
# sort後
aaaaaaa
aaaaaaa
ccccccc
# uniq之後
aaaaaaa
bbbbbbb
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章