Awk常用用法整理
awk
語法:
awk [option] 'pattern {action}' file
引數選項
-F 指定欄位分隔符
-v 定義或者修改一個awk內部的變數
使用範例
[root@db1 ~]# cat -n passwd
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 halt:x:7:0:halt:/sbin:/sbin/halt
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10 operator:x:11:0:operator:/root:/sbin/nologin
顯示檔案第5行
root@db1 ~]# awk 'NR==5' passwd
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
顯示檔案2-6行
[root@db1 ~]# awk 'NR==2,NR==6' passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
給檔案顯示行號
awk '{print NR,$0}' passwd
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 halt:x:7:0:halt:/sbin:/sbin/halt
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10 operator:x:11:0:operator:/root:/sbin/nologin
顯示檔案第2行到第6行,並顯示行號
# awk 'NR==2,NR==6 {print NR, $0}' passwd
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
顯示檔案的第一列和最後一列
# awk -F ":" '{print $1,$NF}' passwd
root /bin/bash
bin /sbin/nologin
daemon /sbin/nologin
adm /sbin/nologin
lp /sbin/nologin
sync /bin/sync
shutdown /sbin/shutdown
halt /sbin/halt
mail /sbin/nologin
operator /sbin/nologin
用gsub函式把檔案中的/sbin/nologin替換為/bin/bash
gsub("替換物件","替換成什麼內容",哪一列)
# awk '{gsub("/sbin/nologin","/bin/bash",$0); print $0}' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/bash
daemon:x:2:2:daemon:/sbin:/bin/bash
adm:x:3:4:adm:/var/adm:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/bin/bash
operator:x:11:0:operator:/root:/bin/bash
取出網路卡的IP地址:
root@db1 ~]# ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.210 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::20c:29ff:fe66:629a prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:66:62:9a txqueuelen 1000 (Ethernet)
RX packets 23839 bytes 2151619 (2.0 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 272 bytes 19255 (18.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
# ifconfig ens33|awk -F "(inet)|(netmask)" 'NR==2{print $2}'
192.168.1.210
說明:以(inet)|(netmask)為分隔符
# ifconfig ens33|awk -F " " 'NR==2{print $2}'
192.168.1.210
說明:以空格為分隔符
取出使用者名稱
# awk -F ":" '{print $1}' passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
operator
取出使用者名稱後排序
# awk -F ":" '{print $1}' passwd|sort
abrt
adm
admin
apache
avahi
bin
chrony
cockpit-ws
colord
去重計數
awk -F ":" '{print $NF}' passwd|sort|uniq -c
# awk -F ":" '{print $NF}' passwd|sort|uniq -c
10 /bin/bash
1 /bin/sync
1 /sbin/halt
43 /sbin/nologin
1 /sbin/shutdown
第2種方法
建立陣列
# awk -F ":" '{hotel[$NF]}' passwd
# awk -F ":" '{hotel[$NF];print $NF}' passwd
開始統計
# awk -F ":" '{hotel[$NF]++;print $NF,hotel[$NF]}' passwd
# awk -F ":" '{hotel[$NF]++}END{for(domain in hotel)print domain,hotel[domain]}' passwd
/bin/sync 1
/bin/bash 10
/sbin/nologin 43
/sbin/halt 1
/sbin/shutdown 1
行號小於3的行
# awk 'NR < 3 {print $0}' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
以root開頭的行
awk '/^root/{print $0}' passwd
root:x:0:0:root:/root:/bin/bash
第3到第6行
# awk 'NR>3 && NR<=6 {print $0}' passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
檔案前列印aaa bbb,檔案結束尾部列印ccc ddd
awk 'BEGIN{print "aaa","bbb"} {print $1,$2} END{print "ccc","ddd"}' passwd
awk -F ":" '{ if($3 < 500) { print $1,"system user"} else{ print $1,"putong user" } }' /etc/passwd
root system user
bin system user
daemon system user
adm system user
lp system user
sync system user
shutdown system user
awk 'BEGIN{ for( i=1;i<=6;i++ ){ print i } }'
awk -v i=1 'BEGIN{ while(i<=5){print i;i++} }'
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/51077/viewspace-2699787/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Sed常用用法整理
- awk常用案例
- 【Shell】sed xargs grep awk的組合用法
- xPath 用法總結整理
- Linux中最常用的一套“AWK“Linux
- js常用方法整理JS
- 常用函式整理函式
- 常用JS方法整理JS
- Gremlin -- 常用查詢用法REM
- 專案中關於解構的常用用法,我都幫你整理好了
- python常用程式碼整理Python
- java中Lamdba表示式的用法整理Java
- Java基礎知識整理之this用法Java
- hutool工具類常用API整理API
- Linux常用命令整理Linux
- Docker常用命令整理Docker
- SQLServer常用運維SQL整理SQLServer運維
- Oracle 常用運維命令整理Oracle運維
- SQL Server常用函式整理SQLServer函式
- Flow 常用知識點整理
- 常用的JScript程式碼整理JS
- 原生js的常用方法整理JS
- 常用python爬蟲框架整理Python爬蟲框架
- Linux——常用命令整理Linux
- 頁面常用程式碼整理
- Monkey基本用法與常用引數
- Butter Knife常用用法總結
- C# List常用函式用法C#函式
- awk
- go 常用包整理 (持續更新)Go
- Java8 Stream常用API整理JavaAPI
- HTML5 Canvans 常用API整理HTMLAPI
- 個人JS常用類庫整理JS
- 部分常用分詞工具使用整理分詞
- Koa 框架常用知識點整理框架
- Python 常用系統模組整理Python
- 字串和陣列常用方法整理字串陣列
- Linux生產環境上,最常用的一套“AWK“技巧Linux