Chinaunix首页 | 论坛 | 博客
  • 博客访问: 185813
  • 博文数量: 36
  • 博客积分: 1952
  • 博客等级: 上尉
  • 技术积分: 485
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-08 22:30
文章存档

2011年(1)

2010年(35)

分类: LINUX

2010-07-11 22:23:06

cat *.log  | awk '{print $7}' | sort | uniq | grep
三种调用awk:
1、命令行方式:
awk -F:'commands' input-file
2、awk的结果保存
重定向输出:
awk '{print $0}' /var/log/messages  > qq.txt
tee输出(同时保存到qq.txt里面:
awk '{print $0}' /var/log/messages | tee qq.txt
3、打印报告头
awk 'BEGIN {print "Name    Belt"}'
===================================================
 
1、awk 'END {print NR}'  /etc/passwd
2、awk常用字符:
\ ^ $ . [] | () * + ?
3、awk条件操作符
<        小于
<=       小于等于
==       等于
!=       不等于
>=       大于等于
~        匹配正则表达式
!~        不匹配正则表达式
---------------------------------------
(1)匹配:
awk '{if($4~/Brown/) print $0}'  grade.txt
awk '{if($4~/root/) print $0}'  /etc/passwd
awk '$0 ~ /root/' /etc/passwd 匹配root
(2)精确匹配:
awk '$4=="Brown"{print $0}' grade.txt
awk '$4=="root" {print $0}' /etc/passwd
(3)不匹配:
awk '{if($4!~/root/) print $0}' /etc/passwd
awk '{if($4!~/Brown/) print $0}'  grade.txt
awk '$4 !="Brown" {print$0}' /etc/passwd 匹配非Brown
(4)小于:
awk '{if ($3 < $4) print $0 "$4 MyGroup id is bigger"}' /etc/passwd
awk '{if ($3 < $4) print $$ "$4 MyGroup id is bigger"}' /etc/passwd
(5)小于等于:
awk '{if ($3 <= $4) print $0 "$4 MyGroup id is bigger"}' /etc/passwd
(6)大于:
awk '{if ($3 > $4) print $1}' /etc/passwd
awk '{if ($3 > $4) print $0}' /etc/passwd
(7)大小写:
awk '/[Us]eing/' /var/log/messages  |more 匹配[]内的任意字符和单词,包含Useing不论大小写
(8)任意字符:
 awk '$1 ~/^...t/' /etc/passwd
抽取名字,其记录第一域的第四个字符是t,使用句点.。表达式/ ^ . . . t /意为行首前三个字
符任意,第四个是t,尖角符号代表行首。
(9)或关系匹配:
awk '$0~/(root|liang)/' /etc/passwd
意为匹配| 两边模式之一,必须用()括起来
(10)行首:
 awk '/^root/' /etc/passwd
=======================================
复合表达式:模式间通过使用下述各表达式互相结合起来的表达式:
&&  AND:语句两边必须同时匹配为真
||  OR:语句两边同时或其中一边匹配为真
! 非  求逆
============================================
(11)AND:
awk '{if ($1=="root" && $3=="0") print $0}' /etc/passwd
&&两边匹配为真
(12)Or
awk '{if ($1=="root" || $5=="root") print $1}' /etc/passwd
||两边匹配模式之一或全部
4、awk内置变量
ARGC                        命令行参数个数
ARGV                       命令行参数排列
ENVIRON                    支持队列中的系统环境变量的使用
E N V I R O N              支持队列中系统环境变量的使用
FILENAME                   a w k浏览的文件名
awk 'END {print FILENAME}' /etc/passwd                 
F N R                          浏览文件的记录数
F S                     设置输入域分隔符,等价于命令行- F选项
N F                     浏览记录的域个数
N R                       已读的记录数
O F S                    输出域分隔符
O R S                     输出记录分隔符
R S                         控制记录分隔符
===============================================================
A R G C支持命令行中传入a w k脚本的参数个数。A R G V是A R G C的参数排列数组,其中每
一元素表示为A R G V [ n ],n为期望访问的命令行参数。
E N V I R O N 支持系统设置的环境变量,要访问单独变量,使用实际变量名,例如
E N V I R O N [“E D I TO R”] =“Vi”。
F I L E N A M E支持a w k脚本实际操作的输入文件。因为a w k可以同时处理许多文件,因此如
果访问了这个变量,将告之系统目前正在浏览的实际文件。
F N R支持a w k目前操作的记录数。其变量值小于等于N R。如果脚本正在访问许多文件,
每一新输入文件都将重新设置此变量。
F S用来在a w k中设置域分隔符,与命令行中- F选项功能相同。缺省情况下为空格。如果用
逗号来作域分隔符,设置F S = ","。
N F支持记录域个数,在记录被读之后再设置。
O F S允许指定输出域分隔符,缺省为空格。如果想设置为#,写入O F S = " # "。
O R S为输出记录分隔符,缺省为新行( \ n)。
R S是记录分隔符,缺省为新行( \ n )。
===========================================================================================
awk '{print NF,NR,$0}END{print FILENAME}'  /etc/passwd
使用NF变量显示每条读记录中有多少个域,并在最后打印文件名
 awk '{if (NR >0 && $1~/root/)print $0}' /etc/gshadow
在文件中第一域中至少有一个记录查询root,然后输出
5、操作符
=  +=  *=  /  =  %=  ^ =           赋值操作符
?                                条件表达操作符
||    &&       !                   并、与、非(上一节已讲到)
~!~                               匹配操作符,包括匹配和不匹配
<   <=    ==    !=   >>           关系操作符
+   -     *    /    %    ^         算术操作符
+    +    --                         前缀和后缀
 
 
阅读(960) | 评论(0) | 转发(0) |
0

上一篇:数学计算方法

下一篇:awk-002

给主人留下些什么吧!~~