每天进步一点点——linux——awk

一、        简介

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值