标签:awk sed grep
awk是一个强大的文本分析工具。相对grep sed awk显得更屌炸。
[root@localhost pangbing]# awk -Wversion 或是awk --version
GNU Awk 3.1.7
Copyright (C) 1989, 1991-2009 Free SoftwareFoundation.
2.域和记录
域的标记为$1 $2 $3.....。这种方法称为域标识。
$0表示所有域 。例子:awk ‘{print $0}‘文件名
例子:awk ‘{print $0}‘文件名>文件名| tee文件名
管道前边的结果会直接输出到文件,不会输出到屏幕上。tee命令就是能同时让结果输出到屏幕上。
打印不同的域,中间用逗号隔开 。
例子:‘{print$1,$3,$7}‘
3.awk匹配正则表达式
元字符: 这里是a w k中正则表达式匹配操作中经常用到的字符:
\ ^ $ . [] [^] | () * +?
条件操作符
表9 - 2给出a w k条件操作符,后面将给出其用法。
表9-2 awk条件操作符
操 作 符 描 述 操 作 符 描 述
< 小于 >= 大于等于
<= 小于等于 ~ 匹配正则表达式
== 等于 !~ 不匹配正则表达式
!= 不等于
<1> 匹配
为使某一域号匹配正则表达式,使用符号‘~’后紧跟正则表达式
例子:
awk /root/ /etc/passwd这个是简单的写法 ;passwd文件中只要含有root的行就打印出来
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
awk -F: ‘$1~/root/‘ /etc/passwd意思是以:
为分隔符号,打印第一段(区域)匹配含有root的行
root:x:0:0:root:/root:/bin/bash
awk -F: ‘$3~/0/‘ /etc/passwd意思是以:为分隔符号,打印第三段(区域)匹配含有0的行
awk -F: ‘$3=="0"‘ /etc/passwd意思是以:为分隔符号,打印第三段(区域)匹配是0的行(这时精确匹配)
<2>. 精确匹配
为精确匹配48,使用等号==,并用单引号括起条件。例如$3==“48”,这样确保只有4 8
序号得以匹配,其余则不行。
awk -F: ‘$3~/0/‘ /etc/passwd意思是以:为分隔符号,打印第三段(区域)匹配含有0的行
root:x:0:0:root:/root:/bin/bash
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
pangbing:x:500:500:pangbing:/home/pangbing:/bin/bash
awk -F: ‘$3=="0"‘ /etc/passwd意思是以:为分隔符号,打印第三段(区域)匹配只是0的行( 这是精确匹配)
################
root:x:0:0:root:/root:/bin/bash
awk ‘/^ /‘文件名 匹配以空格开头的行
awk ‘/^ | ^#/‘ httpd.conf匹配空格开头的或者是^#开头的
awk ‘!(/表达式1/ && /表达式2/)‘ /etc/passwd 表示取反
<3>不匹配
awk -F: ‘$3!="0"‘ /etc/passwd
awk -F: ‘$3!~/0/‘ /etc/passwd
<4>比较
awk -F: ‘$3>=$4‘ /etc/passwd
4.计算
[root@localhostpangbing]# cat 1
1 11
2 12
3 14
4 22
<1>求和
格式:awk ‘{变量名+=第几列}END{print变量名}‘文件名
[root@localhost pangbing]#awk ‘{sum+=$1}END{print sum}‘ 1
10
[root@localhostpangbing]#awk ‘{sum+=$2}END{print sum}‘ 1
59
<2>求平均值
格式:awk ‘{变量名+=第几列}END{print变量名/NR}‘文件名
[root@localhostpangbing]#awk ‘{a+=$2}END{print a/NR}‘ 1
14.75
5.多条件同时匹配
[root@localhost pangbing]# cat 1
1 11
1 12 asd fff
1 13 2
同时匹配多个条件
格式:awk ‘条件1&&条件2&&条件...‘文件名
[root@localhostpangbing]# awk ‘$1~/1/ && $2~/12/‘ 1
awk‘$1~"1" && $2~"12"‘ 1 //也可以用""代替
1 12 asd fff
<1>前提是用 ~ 匹配时可以用双引号替换//,
<2>/表达式/单独出现时,不要用双引号替换,结果会有误。
本文出自 “运维之道” 博客,请务必保留此出处http://bin666.blog.51cto.com/12745149/1911384
标签:awk sed grep
原文地址:http://bin666.blog.51cto.com/12745149/1911384