AWK是一个优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一。这种编程及数据操作语言(其名称得自于它的创始人阿尔佛雷德·艾侯、彼得·温伯格和布莱恩·柯林汉姓氏的首个字母)的最大功能取决于一个人所拥有的知识。awk经过改进生成的新的版本nawk,gawk,现在默认linux系统下日常使用的是gawk,用命令可以查看正在应用的awk的来源(ls -l /bin/awk )。擅长取列,可以过滤内容,特长:取列。默认以空格为分隔符。
$NF:表示最后一列。$(NF-1):倒数第二列。
$0:表示整行。
NR:表示行号。
&&(and):表示并且。
\n:回车换行。
简单例子:
[root@saltstack-client2 test]# cat awk.txt
oldboy oldgirl
ddd fff
[root@saltstack-client2 test]# awk '{print $1}' awk.txt
oldboy
ddd
[root@saltstack-client2 test]# awk '{print $2}' awk.txt
oldgirl
fff
例子:
打印/etc/passwd第一列的内容
[root@saltstack-client2 test]# cat /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
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
saslauth:x:499:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
oprofile:x:16:16:Special user account to be used by OProfile:/home/oprofile:/sbin/nologin
nagios:x:1000:1000::/home/nagios:/bin/bash
tomcat:x:1002:1002::/data/tomcat/:/bin/bash
zabbix:x:498:498:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
[root@saltstack-client2 test]# awk -F ":" '{print $1}' /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
uucp
operator
games
gopher
ftp
nobody
dbus
vcsa
rpc
abrt
haldaemon
ntp
saslauth
postfix
rpcuser
nfsnobody
sshd
tcpdump
oprofile
nagios
tomcat
zabbix
mysql
打印/etc/passwd最后一列的内容
[root@saltstack-client2 test]# awk -F ":" '{print $NF}' /etc/passwd
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/bash
/bin/bash
/sbin/nologin
/bin/bash
小练习,练习着玩 哈哈
[root@saltstack-client2 test]# awk -F ":" '{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
uucp=x=10
operator=x=11
games=x=12
gopher=x=13
ftp=x=14
nobody=x=99
dbus=x=81
vcsa=x=69
rpc=x=32
abrt=x=173
haldaemon=x=68
ntp=x=38
saslauth=x=499
postfix=x=89
rpcuser=x=29
nfsnobody=x=65534
sshd=x=74
tcpdump=x=72
oprofile=x=16
nagios=x=1000
tomcat=x=1002
zabbix=x=498
mysql=x=27
awk多分隔符功能
例子:取出oldboy 49000448
[root@saltstack-server ~]# cat oldboy.txt
I am oldboy, myqq is 49000448
法一:
[root@saltstack-server ~]# sed 's#,# #g' oldboy.txt |cut -d " " -f3,7
oldboy 49000448
法二:(自己想的)
[root@saltstack-server ~]# cut -d " " -f3,6 oldboy.txt |awk -F "," '{print$1 $2}'
oldboy 49000448
awk多分割符的用法举例
法三:使用多分隔符:[ ]
[root@saltstack-server ~]# awk -F "[, ]" '{print $3 " " $7}' oldboy.txt -à以逗号,空格作为分割符。
oldboy 49000448
查看文件的行数(wc命令案例)
-l:查看文件的行数
-c:查看文件的字节数
-m:查看文件的字符数
记住-l就行!
查看文件行数例子
例子:
[root@saltstack-server ~]# cat oldboy.txt
I am oldboy, myqq is 49000448
[root@saltstack-server ~]# wc -l oldboy.txt
1 oldboy.txt
[root@saltstack-server ~]# wc -l /etc/services
10774 /etc/services
查看某个服务是否开启
查看下SSH服务是否开启:
[root@saltstack-server ~]# netstat -lntup|grep ssh
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1571/sshd
查看进程数(企业案例常见)
[root@saltstack-server ~]# netstat -lntup|grep ssh|wc -l
1
过滤多个字符串
例子:
[root@saltstack-server ~]# grep -E "3306|1521" /etc/services
mysql 3306/tcp # MySQL
mysql 3306/udp # MySQL
ncube-lm 1521/tcp # nCube License Manager
ncube-lm 1521/udp # nCube License Manager