awk 使用高階及使用案例

2021-10-01 16:33:25 字數 4551 閱讀 6856

# chen @ localhost in ~/shell [18:36:13] 

$ awk -v num=3 -f: ''

passwd33

3333

# 注意:awk中呼叫定義的變數不需要加$

# chen @ localhost in ~/shell [18:37:04]

$ awk -v num=3 -f: ''

passwd01

2356

1.3.1. 概述

1.3.2. 學習示例2.1. 學習示例

2.1.1. 列印以 root 開頭或者以 adm 開頭的行

# chen @ localhost in ~/shell [19:25:20] c:130

$ awk

'/^adm/ || /^root/ '

passwd

root:x:0:0:root:/root:/bin/zshi

adm:x:3:4:adm:/var/adm:/sbin/nologin

# 方法2

# chen @ localhost in ~/shell [19:25:23]

$ awk

'/^adm/;/^root/ '

passwd

2.1.2. 列印1到7行 以 bash 結尾的內容
# chen @ localhost in ~/shell [19:30:14] 

$ awk

'nr>=2 && nr<=7 && $0 ~ /login$/'

passwd

in:x:1:1:bin:/bin:/sbin/nologin

ddaemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

# 方法2

# chen @ localhost in ~/shell [19:30:19]

$ awk

'nr>=2 && nr<=7 && /login$/'

passwd

in:x:1:1:bin:/bin:/sbin/nologin

ddaemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

2.1.3. 獲取電腦的 ip
# chen @ localhost in ~/shell [19:34:07] 

$ ifconfig eth0 |

grep broadcast

inet 192.168.10.36 netmask 255.255.255.0 broadcast 192.168.10.255

# chen @ localhost in ~/shell [19:38:03]

$ ifconfig eth0 |

grep broadcast |

awk -f'[ ]+'

''

192.168.10.36

# 方法2

# chen @ localhost in ~/shell [19:40:35]

$ ifconfig eth0 |

awk -f'[ ]+'

'/broadcast/'

192.168.10.36

# 方法3

# chen @ localhost in ~/shell [19:41:36]

$ ifconfig eth0 |

awk -f'[ ]+'

'/broadcast/'

192.168.10.36

255.255.255.0

192.168.10.255

3.1. if結構

3.1.1. 語法結構

awk

[選項]

'正則','位址定位 ' 檔名

3.1.2. 學習案例
# chen @ localhost in ~/shell [19:47:31] 

$ awk -f: '}'

passwd

in 1

ddaemon 2

adm 3

sync 5

3.2. if…else

3.2.1. 語法結構

awk

[選項]

'正則','位址定位 ' 檔名

else

}

3.2.2. 學習案例

判斷使用者是否為普通使用者

# chen @ localhost in ~/shell [21:42:30] 

$ awk -f: ' else }'

passwd

不是普通使用者

不是普通使用者

不是普通使用者

不是普通使用者

不是普通使用者

不是普通使用者

3.3. if else if {} else if{}

3.3.1. 語法結構

awk

[選項]

'正則','位址定位 ' 檔名

else

if(表示式2)

else

if(表示式2)

... else

}

3.3.2. 學習案例

計算系統中管理員、系統使用者、普通使用者個數

# chen @ localhost in ~/shell [21:54:20] 

$ awk -f: ' else if($3>=1 && $3

<=499 || $3==65534) else }; end ' passwd2

管理員個數為: 1

系統使用者個數為: 4

普通使用者個數為: 3

4.1. for結構

4.1.1. 語法結構

awk

[選項]

'正則','位址定位 '

}

4.1.2. 學習案例

4.2. while結構

4.2.1. 語法結構

awk

[選項]

'正則','位址定位 '

}

4.2.2. 學習案例

4.3. 巢狀迴圈

學習案例

利用巢狀迴圈列印如下所示圖形

5

54543

5432

54321

# chen @ localhost in ~ [10:16:54] 

$ awk

'begin print} }' 554

5435432

54321

5.1. 統計系統中各種型別的 shell
# chen @ localhost in ~ [10:21:46] c:130

$ awk -f: '; end }' /etc/passwd

/bin/sync 1

/sbin/nologin 43

/sbin/halt 1

/bin/zsh 2

/sbin/shutdown 1

5.2. 統計**訪問狀態
# chen @ localhost in ~ [10:29:09] 

$ ss -an |

grep :80 |

awk';end }'

|sort -k2 -rn

estab 18

time-wait 13

listen 10

5.3. 統計**的每個 ip 的數量
# chen @ localhost in ~ [10:53:05] 

$ netstat -ant |

grep :80 |

awk -f ':'''|

awk -f '[ ]+'

'; end }'

ip: 192.168.10.100 |count: 3

ip: 192.168.10.96 |count: 20

ip: 192.168.10.102 |count: 2

ip: 192.168.10.98 |count: 2

ip: 0.0.0.0 |count: 10

ip: 192.168.10.104 |count: 2

ip: 192.168.10.108 |count: 1

5.4. 統計 tomcat **日誌中 pv 量
# chen @ localhost in /usr/local/tomcat/apache-tomcat-8.5.42/logs [10:57:50] 

$ awk -f'[ ]+'

'; end}' localhost_access_log.2019-09-11.txt

192.168.10.71 3

192.168.10.36 9

awk 使用案例

awk 語言的最基本功能是在檔案或字串中基於指定規則瀏覽和抽取資訊,awk 抽取資訊後,才能進行其他文字操作,完整的 awk 指令碼通常用來格式化文字檔案中的資訊 語法格式 awk 選項 指令 操作檔案 常用選項 f 指定分隔符,分隔符用 引起來 不加任何引數預設為空格分隔 定位行號 使用nr ro...

很直觀的awk使用案例

awk是linux文字處理三劍客之一,在grep,sed,awk中,awk功能最為強大,使用最為靈活,因為其本身也屬於一種程式語言,可以通過程式設計實現各種需要的文字處理需求。當然,awk使用也較為複雜,這裡用直觀的例子來介紹awk的日常使用。步驟1 root centos8 ifconfig en...

cut及awk簡單使用

用法 cut d f2 檔案 c 以字元為單位進行分割 d 分隔符,後面用引號引住分隔符 f 與 d 連用,指定顯示那個區域 例項1 1 root jz cat a.txt 12 34 56 78 9 root jz cut c 1 5 a.txt 擷取a.txt檔案第1到5個字元 12 34 ro...