linux awk工具

2018-07-20  本文已影响0人  ChinaLeee

awk是一个非常好用的数据处理工具。相较于sed常常一整行处理,awk则比较倾向于一行当中分成数个“字段”处理,awk处理方式如下:   $awk'条件类型1{动作1} 条件类型2{动作2} ...'filename

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

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

lzyer    192.168.56.1reboot    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:0:0:root:/root:/bin/zsh

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

统计数据例子:

$cat pay.txt

Name    1st    2nd    3th

VBird  230002400025000DMTsai  210002000023000Bird2  430004200041000

$cat pay.txt|awk 'NR==1{printf "%10s %10s %10s %10s %10s\n",$1,$2,$3,$4,"Total"} \

NR>=2{total=$2+$3+$4

> printf"%10s %10d %10d %10d %10.2f\n",$1,$2,$3,$4,total}' Name 1st 2nd 3th Total}'

     VBird      23000240002500072000.00    

    DMTsai      21000200002300064000.00    

    Bird2      430004200041000126000.00

上一篇 下一篇

猜你喜欢

热点阅读