文本三剑客之awk

简介

用于在linux/unix下对文本和数据进行处理。数据可以来自一个或多个文件,也可以其他命令的输出,常作为脚本来使用。在执行操作时,awk逐行读取文本,默认以空格为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,对比该行是否与给定的模式相匹配,并按模式或者条件执行编辑命令,也可以从脚本中调用编辑指令过滤输出相应内容。

基本语法

awk [选项] '模式或条件 {编辑指令}' 文件1 文件2

awk -f 脚本文件 文件1 文件2

格式:

awk  选项   ‘模式{处理动作}’

选项:

-F 指定分隔符

-v 自定义变量

-f 脚本

默认是F

模式(program):

放在单引号里面,并可以由三种部分组成

  • BEGIN语句块
  • 模式匹配的通用语句块
  • END语句块

awk常见内置变量

  • FS:指定每行文本的字段分隔符,缺省为空格或制表符(tab)。与“-F”作用相同 -v"FS=:"
  • OFS:输出时的分隔符
  • NF:当前处理的行的字段个数
  • NR:当前处理的行的行号(序数)
  • $0:当前处理的行的整行内容
  • $n:当前处理行的第n个字段(第n列)
  • FILENAME:被处理的文件名
  • RS:行分隔符。awk从文件上读取资料时,将根据RS的定义就把资料切割成许多条记录,而awk一次仅读入一条记录进行处理。预设值是\n

示例

[root@mjy ~]# df -Th|awk '{print $1,$6}'
文件系统 已用%
/dev/mapper/centos-root 10%
devtmpfs 0%
tmpfs 0%
tmpfs 2%
tmpfs 0%
/dev/sda1 9%
tmpfs 1%
tmpfs 1%
/dev/sr0 100%

打印/etc/passwd文件中以root开头的行

[root@mjy ~]# awk '/^root/{print}' /etc/passwd
root:x:0:0:root:/root:/bin/bash

统计可登录系统用户的个数

[root@mjy ~]# awk -F":" '/bash$/{print|"wc -l"}' /etc/passwd
2

取ip

[root@mjy ~]# ifconfig ens33|awk '/netmask/{print $2}'
192.168.247.99

统计/etc/fstab中每个文件系统类型出现的次数

[root@mjy ~]# cat /etc/fstab|sed -n '9,$p'|awk '{print $3}'|sort|uniq -c
      1 swap
      2 xfs

统计/etc/fstab文件中每个单词出现的次数

[root@mjy ~]# grep -Eo "\b[[:alpha:]]+\b" /etc/fstab|sort|uniq -c|sort
      1 Accessible
      1 anaconda
      1 and
      1 are
      1 blkid
      1 boot
      1 Created
      1 disk
      1 etc
      1 filesystems
      1 findfs
      1 for

你可能感兴趣的:(shell脚本,linux,服务器,运维)