@awk判断输出----一些不常见的用法@

来源:互联网 发布:美工教学视频基础知识 编辑:程序博客网 时间:2024/04/30 13:33
 今天发现了一个awk的一个判断功能,如果匹配就输出,不匹配则不输出,实际上也可以理解成搜索功能吧,就是在日志中搜索关键字。

实例一:

[oracle@Test231 ~]$ echo "INFO: Server startup in 2325 ms"
INFO: Server startup in 2325 ms

[oracle@Test231 ~]$ echo "INFO: Server startup in 2325 ms"|awk '{print $1}'
INFO:

[oracle@Test231 ~]$ echo "INFO: Server startup in 2325 ms"|awk '{print $2}'
Server
[oracle@Test231 ~]$ echo "INFO: Server startup in 2325 ms"|awk '{print $3}'
startup
[oracle@Test231 ~]$ echo "INFO: Server startup in 2325 ms"|awk '{if(($2~/Server/)&&($3~/startup/))print}'
INFO: Server startup in 2325 ms
[oracle@Test231 ~]$

其实真正的用法是tail -n number /opt/log/catalina.out | awk'{if(($2~/Server/)&&($3~/startup/))print}'

查看tomcat是否启动~


 实例二:

[oracle@Test232 ~]$ ls -l /opt/oracle/tomcat
total 8

drwxr-xr-x 9 oracle oinstall 4096 May 17  2011 tomcat-cas
drwxr-xr-x 9 oracle oinstall 4096 Jun 24 13:30 tomcat-test

 

下面显示的是行数:

[oracle@Test232 ~]$ ls -l /opt/oracle/tomcat |awk /^d/'{print$NR}'
9
oracle

[oracle@Test232 ~]$ ls -l /opt/oracle/tomcat |awk/^d/'{print$NF}'
tomcat-cas
tomcat-test

注意:

       NF          The number of fields in the current input record.
       NR          The total number of input records seen so far.

 

实例三:

[oracle@Test232 ~]$ ls -l /opt/oracle/tomcat |awk /^d/'{print$NF}'|awk '{print length($1)}'

10
11

ps:

awk里面的测试字符串长度的命令

 

实例四:

[oracle@SOR_SYS ~]$ cat /opt/oracle/tomcat/tomcat-cas/conf/catalina.properties | grep ajp.port
ajp.port=8011

[oracle@SOR_SYS ~]$ cat /opt/oracle/tomcat/tomcat-cas/conf/catalina.properties | grep ajp.port | awk '{print "ajp:"}'
ajp:

[oracle@SOR_SYS ~]$ cat /opt/oracle/tomcat/tomcat-cas/conf/catalina.properties | grep ajp.port | awk '{print "ajp:" substr($1,10)}'
ajp:8011

注意:

 substr(s, i [, n])      Returns the at most n-character substring of s starting at i.  If  n  is  omitted,  the
                               rest of s is used.

s u b s t r是一个很有用的函数,它按照起始位置及长度返回字符串的一部分。

[oracle@SOR_SYS ~]$ cat /opt/oracle/tomca/ttomcat-cas/conf/catalina.properties | grep ajp.port | awk '{print substr($1,1,8)}'
ajp.port

从这个例子可以看出,如果那个后面的8省略了,那就是表示从第一个字符开始输出,后面的没有限制。

这下你应该理解上面那个的意思了吧,O(∩_∩)O~

实例五:

[oracle@SOR_SYS ~]$ who|awk '{if ($1 == "root") print $1"you are connected to "$2}'
rootyou are connected to pts/2
rootyou are connected to pts/3