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、操作符
= += *= / = %= ^ = 赋值操作符
? 条件表达操作符
|| && ! 并、与、非(上一节已讲到)
~!~ 匹配操作符,包括匹配和不匹配
< <= == != >> 关系操作符
+ - * / % ^ 算术操作符
+ + -- 前缀和后缀
阅读(995) | 评论(0) | 转发(0) |