linux中awk工具的使用

  

  awk是一个非常好用的数据处理工具。相较于sed常常一整行处理,awk则比较倾向于一行当中分成数个“字段”处理,awk处理方式如下:

$ awk '条件类型1{动作1} 条件类型2{动作2} ...' filename

1.查看最近5条登录用户和ip地址

$ last -n |awk '{print $1"\t"$3}'
lzyer 192.168.56.1
reboot boot
lzyer 192.168.56.1
reboot boot
lzyer 192.168.56.1 wtmp Sat

注意:$0代表整行

变量名称 代表意义
NF 每一行($0)拥有字段总数
NR 目前awk处理的第几行
FS 目前分隔符,默认是空白

awk的逻辑运算

运算单元 代表意义
> 大于
< 小于
>= 大于等于
<= 小于等于
== 等于
!= 不等于

值得注意的是那个“ == ”的符号,因为:

  • 逻辑运算上面亦即所谓的大于、小于、等于等判断式上面,习惯上是以“ == ”来表示;
  • 如果是直接给予一个值,例如变量设置时,就直接使用 = 而已。

举例来说,在 /etc/passwd 当中是以冒号 ":" 来作为字段的分隔, 该文件中第一字段为帐号,第三字段则是 UID。那假设我要查阅,第三栏小于 10 以下的数据,并且仅列出帐号与第三栏, 那么可以这样做:

$ cat /etc/passwd|awk '{FS=":"} $3<10 {print $0}'
root:x:::root:/root:/bin/zsh
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin

统计数据例子:

$ cat pay.txt
Name 1st 2nd 3th
VBird
DMTsai
Bird2
$ cat pay.txt|awk 'NR==1{printf "%10s %10s %10s %10s %10s\n",$1,$2,$3,$4,"Total"} \
NR>={total=$+$+$
> printf "%10s %10d %10d %10d %10.2f\n",$,$,$,$,total}'
Name 1st 2nd 3th Total
VBird 72000.00
DMTsai 64000.00
Bird2 126000.00
上一篇:微软必应·英雄会第三届在线编程大赛:几个bing?


下一篇:winform防止界面卡死的三种方法