一.原理
- Usage: awk [POSIX or GNU style options] -f progfile [--] file ...
- Usage: awk [POSIX or GNU style options] [--] 'program' file ...
- POSIX options: GNU long options: (standard)
- -f progfile --file=progfile
- -F fs --field-separator=fs
- -v var=val --assign=var=val
- Short options: GNU long options: (extensions)
- -b --characters-as-bytes
- -c --traditional
- -C --copyright
- -d[file] --dump-variables[=file]
- -e 'program-text' --source='program-text'
- -E file --exec=file
- -g --gen-pot
- -h --help
- -L [fatal] --lint[=fatal]
- -n --non-decimal-data
- -N --use-lc-numeric
- -O --optimize
- -p[file] --profile[=file]
- -P --posix
- -r --re-interval
- -S --sandbox
- -t --lint-old
- -V --version
-
- To report bugs, see node `Bugs' in `gawk.info', which is
- section `Reporting Problems and Bugs' in the printed version.
-
- gawk is a pattern scanning and processing language.
- By default it reads standard input and writes standard output.
-
- Examples:
- gawk '{ sum += $1 }; END { print sum }' file
- gawk -F: '{ print $1 }' /etc/passwd
- [root@TDCS dsrw]# awk 'BEGIN {print 1/2} {print "ok"} END {print "Game Over"}' /etc/hosts
- 0.5
- ok
- ok
- Game Over
- [root@TDCS dsrw]# awk /root/ /etc/passwd #匹配/root关键字的行,/awk 'pattern' filename匹配⽂件
- root:x:0:0:root:/root:/bin/bash
- operator:x:11:0:operator:/root:/sbin/nologin
-
- [root@TDCS dsrw]# awk -F: '{print $1}' /etc/passwd #awk '{action}' filename对⽂件⾏进⾏动作处理
- root
- bin
- daemon
- adm
- lp
- sync
- shutdown
- halt
- mail
- operator
- games
- ftp
- nobody
- avahi-autoipd
- systemd-bus-proxy
- systemd-network
- dbus
- polkitd
- tss
- postfix
- sshd
- mysql
- ntp
-
- //awk 'pattern {action}'filename匹配+处理动作
- awk -F':' '/root/ {print $1,$3}' /etc/passwd #匹配/root关键字,并打印$1,$3
- root 0
- operator 11
-
- awk 'BEGIN{FS=":"} /root/ {print $1,$3}' /etc/passwd #匹配/root关键字,并打印$1,$3
-
- //command |awk 'pattern {action}' //判断⼤于多少则输出什么内容
- [root@TDCS dsrw]# df |awk '/\/$/ {if($3>50000) print $4}'
- 43213140
-
-
-
-
- [root@TDCS dsrw]# awk '{print $0}' /etc/passwd
- root:x:0:0:root:/root:/bin/bash
- 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
- shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
- halt:x:7:0:halt:/sbin:/sbin/halt
- mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
- operator:x:11:0:operator:/root:/sbin/nologin
- games:x:12:100:games:/usr/games:/sbin/nologin
- ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
- nobody:x:99:99:Nobody:/:/sbin/nologin
- avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
- systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
- systemd-network:x:998:996:systemd Network Management:/:/sbin/nologin
- dbus:x:81:81:System message bus:/:/sbin/nologin
- polkitd:x:997:995:User for polkitd:/:/sbin/nologin
- tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
- postfix:x:89:89::/var/spool/postfix:/sbin/nologin
- sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
- mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/false
- ntp:x:38:38::/etc/ntp:/sbin/nologin
- [root@TDCS dsrw]# awk '{print NR,$0}' /etc/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
- 11 games:x:12:100:games:/usr/games:/sbin/nologin
- 12 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
- 13 nobody:x:99:99:Nobody:/:/sbin/nologin
- 14 avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
- 15 systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
- 16 systemd-network:x:998:996:systemd Network Management:/:/sbin/nologin
- 17 dbus:x:81:81:System message bus:/:/sbin/nologin
- 18 polkitd:x:997:995:User for polkitd:/:/sbin/nologin
- 19 tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
- 20 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
- 21 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
- 22 mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/false
- 23 ntp:x:38:38::/etc/ntp:/sbin/nologin
-
- [root@TDCS dsrw]# awk 'NR<=3' /etc/passwd
- root:x:0:0:root:/root:/bin/bash
- bin:x:1:1:bin:/bin:/sbin/nologin
- daemon:x:2:2:daemon:/sbin:/sbin/nologin
- [root@TDCS dsrw]# awk '{print FNR,$0}'/etc/passwd /etc/hosts
- 1 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 TDCS
- 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 TDCS
- 2 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
- ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
- [root@TDCS dsrw]# awk -F":" '{print $1,$NF}' /etc/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
- games /sbin/nologin
- ftp /sbin/nologin
- nobody /sbin/nologin
- avahi-autoipd /sbin/nologin
- systemd-bus-proxy /sbin/nologin
- systemd-network /sbin/nologin
- dbus /sbin/nologin
- polkitd /sbin/nologin
- tss /sbin/nologin
- postfix /sbin/nologin
- sshd /sbin/nologin
- mysql /bin/false
- ntp /sbin/nologin
- [root@TDCS dsrw]# awk -F: '/root/ {print $1,$3}' /etc/passwd
- root 0
- operator 11
-
-
- [root@TDCS dsrw]# awk 'BEGIN {FS=":"} {print $1,$3}' /etc/passwd
- root 0
- bin 1
- daemon 2
- adm 3
- lp 4
- sync 5
- shutdown 6
- halt 7
- mail 8
- operator 11
- games 12
- ftp 14
- nobody 99
- avahi-autoipd 170
- systemd-bus-proxy 999
- systemd-network 998
- dbus 81
- polkitd 997
- tss 59
- postfix 89
- sshd 74
- mysql 27
- ntp 38
-
-
- [root@TDCS dsrw]# awk -F '[:\t]' '{print $1,$2,$3}' /etc/passwd
- root x 0
- bin x 1
- daemon x 2
- adm x 3
- lp x 4
- sync x 5
- shutdown x 6
- halt x 7
- mail x 8
- operator x 11
- games x 12
- ftp x 14
- nobody x 99
- avahi-autoipd x 170
- systemd-bus-proxy x 999
- systemd-network x 998
- dbus x 81
- polkitd x 997
- tss x 59
- postfix x 89
- sshd x 74
- mysql x 27
- ntp x 38
- [root@TDCS dsrw]# awk -F: '/root/{print $1,$2,$3,$4}' /etc/passwd
- root x 0 0
- operator x 11 0
-
-
-
- [root@TDCS dsrw]# awk 'BEGIN {FS=":";OFS="+++"} /root/{print $1,$2,$3,$4}' /etc/passwd
- root+++x+++0+++0
- operator+++x+++11+++0
- [root@TDCS dsrw]# awk -F: 'BEGIN {RS=""}{print $0}' /etc/hosts
- 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 TDCS
- ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
- [root@TDCS dsrw]# awk -F: 'BEGIN {ORS=""}{print $0}' /etc/hosts
- 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 TDCS::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
-
- //通常情况下让输出分隔符为换⾏符, 然后依次打印响应的字段
- awk -F":" 'BEGIN{OFS="\n"}{print $1,$2,$3,$4,$5,$6,$7}' /etc/passwd
-
- //将RS记录值标记为冒号分割, 打印后相当于将每⾏的内容进⾏切割
- awk 'BEGIN {RS=":"} {print $0}' /etc/passwd
- date|awk '{print $2,"5⽉份""\n",$NF,"今年"}'
-
- awk -F:'{print "⽤户是:" $1 "\t ⽤户uid:" $3"\t ⽤户gid:" $4}' /etc/passwd
-
-
- [root@TDCS dsrw]# awk -F: '{printf"%-15s%-10s%-15s\n",$1,$2,$3}' /etc/passwd
- root x 0
- bin x 1
- daemon x 2
- adm x 3
- lp x 4
- sync x 5
- shutdown x 6
- halt x 7
- mail x 8
- operator x 11
- games x 12
- ftp x 14
- nobody x 99
- avahi-autoipd x 170
- systemd-bus-proxyx 999
- systemd-networkx 998
- dbus x 81
- polkitd x 997
- tss x 59
- postfix x 89
- sshd x 74
- mysql x 27
- ntp x 38