一、 简介
awk是一个模式扫描及处理语言。
二、 命令格式
awk '条件1{动作1}' '条件2{动作2}'....
三、 常用参数
-f 脚本文件 --file=脚本文件
-Ffs --field-separator=fs
-v var=val --assign=var=val
四、 环境变量
NF 每一行 ($0) 拥有的栏位总数
NR 目前 awk 所处理的是『第几行』数据
FS 目前的分隔字节,默认是空白键
五、 常用例子
1. 只显示权限和文件名,且用制表符隔开
[bzfys@Nagios ~]$ ll
总用量 20
-rw-rw-r-- 1 bzfysbzfys 1966 7月 10 09:37 aaa
-rw-rw-r-- 1 bzfysbzfys 0 6月 1702:20 ll
drwxrwxr-x 6 bzfysbzfys 4096 6月 18 09:31 t1
drwxrwxr-x 6 bzfysbzfys 4096 6月 18 09:16 t2
drwxrwxr-x 2 bzfysbzfys 4096 6月 16 17:40 t7
drwxrwxr-x 3 bzfysbzfys 4096 6月 15 10:51 t8
[bzfys@Nagios~]$ ll |awk '{print $1 "\t" $9}'
总用量
-rw-rw-r-- aaa
-rw-rw-r-- ll
drwxrwxr-x t1
drwxrwxr-x t2
drwxrwxr-x t7
drwxrwxr-x t8
2. 显示$9内容,并且显示行号和本行含有几个栏位
[bzfys@Nagios~]$ ll |awk '{print $9 "\t lines: " NR "\t columns: " NF}'
lines: 1 columns: 2
aaa lines: 2 columns: 9
ll lines: 3 columns: 9
t1 lines: 4 columns: 9
t2 lines: 5 columns: 9
t7 lines: 6 columns: 9
t8 lines: 7 columns: 9
3. 将使用:来做分隔符的内容输出$1和$5,并且用制表符分割
[bzfys@Nagios~]$ head aaa |awk '{FS=":"} {print $1 "\t" $5}'
超级管理员:x:0:0:超级管理员:/超级管理员:/bin/bash
bin bin
daemon daemon
adm adm
lp lp
sync sync
shutdown shutdown
halt halt
mail mail
uucp uucp
4. 逻辑运算——显示UID小于3的行并且只显示用户名和UID用制表符分割
[bzfys@Nagios~]$ cat aaa |awk '{FS=":"} $3<3 {print $1 "\t" $3}'
超级管理员:x:0:0:超级管理员:/超级管理员:/bin/bash
bin 1
daemon 2
1. 逻辑运算——求和运算,算出这些人的工资总和
[bzfys@Nagios ~]$ cat ccc
Name 1st 2nd 3th
VBird 23000 24000 25000
DMTsai 21000 20000 23000
Bird2 43000 42000 41000
思路:
第一行只是说明,所以第一行不要进行加总 (NR==1 时处理);
第二行以后就会有加总的情况出现 (NR>=2 以后处理)
[bzfys@Nagios ~]$ cat ccc| 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 23000 24000 25000 72000.00
DMTsai 21000 20000 23000 64000.00
Bird2 43000 42000 41000 126000.00
也可以写成
[bzfys@Nagios ~]$ cat ccc |awk '{if(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 23000 24000 25000 72000.00
DMTsai 21000 20000 23000 64000.00
Bird2 43000 42000 41000 126000.00