awk

  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 

mail 

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 

 

posted on 2017-03-20 14:55  永远的大空翼  阅读(198)  评论(0编辑  收藏  举报