linux--awk工具

用法

awk "BEGIN { statements }  条件1 { statements }   条件2 { statements }  ...  END { end statements }"
-F,指定分隔符,后面跟单引号

awk的工作模式

  • 执行begin语句块中的语句
  • 从文件或标准输入中读取一行,判断是否符合条件,若符合执行括号中的语句,重复这个过程,直到文件到达末尾
  • 最后执行end语句块

awk中的特殊变量

变量描述
NR执行过程中对应的行号
NF执行过程中当前行的字段数
FS分隔字符,默认为空格
OFS定义输出分隔符
$0执行过程中当前行的文本内容
$n第n个字段的文本内容,n为1,2,3…

实例

#打印每行分隔的第一个字段,以及每行的行数和字段数
[root@mdw ~]# last | awk '{print $1 "\t lines: " NR "\t columes: " NF}'
root     lines: 1        columes: 10
root     lines: 2        columes: 10
root     lines: 3        columes: 10
...
#设置分隔符为冒号,若第三个字段小于10,就打印出该行第一个字段和第3个字段,begin可以省略
[root@mdw ~]# cat /etc/passwd|awk '{FS=":"} $3 < 10 {print $1 "\t " $3} '
root:x:0:0:root:/root:/bin/bash  
bin      1
daemon   2
adm      3
...
[root@mdw ~]# cat /etc/passwd|awk 'BEGIN {FS=":"} $3 < 10 {print $1 "\t " $3} '
root     0
bin      1
daemon   2
...

练习题

  1. 用awk打印整个test.txt文档
    awk '{print $0}' test.txt
  2. 查找所有包含bash的行
    awk /bash/ test.txt
  3. 用·:作为分隔符,查找第3个字段等于0的行
    awk -F ':' '$3==0' test.txt
  4. 用·:作为分隔符,查找第1个字段为root的行,并把root换成toor
    awk -F ':' '$1=="root"' test.txt | sed -n 's/root/toor/g'p
  5. 用·:作为分隔符,打印最后一个字段
    awk -F ':' '{print $NF}' test.txt
  6. 打印行数大于20的所有行
    awk -F ':' '$NR>20' test.txt
  7. 用·:作为分隔符,打印所有第3个字段小于第4个字段的行
    awk -F ':' '$3<$4' test.txt
  8. 用·:作为分隔符,打印第一个字段以及最后一个字段,并且中间用@连接
    awk -F ':' '{print $1 "@" $NF}' test.txt
  9. 用·:作为分隔符,把整个文档的第4个字段相加,求和
    awk -F ':' '{(sum+=$4)}; END {print sum}' test.txt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值