Linux awk命令使用详解

awk是一个强大的文本分析工具,通过指定模式和操作对文件进行处理。本文详细介绍了awk的基本用法、选项参数、命令格式及多个具体实例,如查找文件系统剩余空间、匹配正则表达式等。

awk是一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。

1 基本用法

awk [选项参数] ‘pattern1{action1}  pattern2{action2}...’ filename

pattern:表示AWK在数据中查找的内容,就是匹配模式

action:在找到匹配内容时所执行的一系列命令

2 选项参数说明

选项参数功能
-F指定输入文件分隔符,默认为空格
-v赋值一个用户定义变量

3 命令格式

命令格式:
awk 'pattern' filename               示例:awk '/root/' /etc/passwd
awk '{action}' filename              示例:awk -F: '{print $1}' /etc/passwd
awk 'pattern {action}' filename      示例:awk -F: '/root/{print $1,$3}' /etc/passwd

4 相关变量

$1,$2,$3...$n:awk中用该顺序形式表示files中每行以间隔符号分割的各列的不同字段
$0             表示文本本身
NF             表示当前记录的字段数(列数)
$NF            最后一列
$(NF-1)        倒数第二列
NR             行号
FILENAME       文件名
"\t"           制表符
RS             换行符
""             打印字符串
FS             定义间隔符
~              匹配,与==相比不是精确比较
!~             不匹配,不精确比较
==             等于,必须全部相等,精确比较
/[0-9][0-9]+/  两个或两个以上数字
-F'[:#/]'      定义三个分隔符
# awk -F: '{print $0}' /etc/passwd        //打印文件所有内容
# awk -F: '{print NR, $0}' /etc/passwd /etc/hosts    //打印文件所有内容,并包括行号

4 具体例子

  1. 找出文件系统剩余空间在25000K以上的(模式为比较表达式)
[root@hadoop101 ~]# df -P
Filesystem     1024-blocks    Used Available Capacity Mounted on
/dev/sda3         18244476 1998604  15312448      12% /
tmpfs               953140       0    953140       0% /dev/shm
/dev/sda1           194241   35681    148320      20% /boot
[root@hadoop101 ~]# df -P | grep '/'
/dev/sda3         18244476 1998604  15312448      12% /
tmpfs               953140       0    953140       0% /dev/shm
/dev/sda1           194241   35681    148320      20% /boot
[root@hadoop101 ~]# df -P | grep '/'| awk '$4 > 25000 {print $4}'
15312448
953140
148320

2./etc/passwd文件的匹配(模式为正则表达式)

[root@hadoop101 ~]# awk '/^halt/' /etc/passwd  匹配以halt开头的行
halt:x:7:0:halt:/sbin:/sbin/halt
[root@hadoop101 ~]# awk '!/^halt/' /etc/passwd  匹配以非halt开头的行
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
...
[root@hadoop101 ~]# awk -F: '$1 ~ /^s/'  /etc/passwd 匹配第1部分以s开头的行
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
[root@hadoop101 ~]# awk -F: '$NF !~ /nologin$/'  /etc/passwd  匹配最后一部分不是以nologin结尾的行
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
  1. /etc/passwd文件的匹配(模式为算术运算符)
[root@hadoop101 ~]# awk -F: '$3 * 10 > 500' /etc/passwd
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
  1. /etc/passwd文件的匹配(模式为逻辑运算符)
&&        逻辑与        a&&b
||        逻辑或        a||b
!         逻辑非        !a
# awk -F: '$3 > 50 && $3 <=100' /etc/passwd
# awk -F: '$3 == 0 || $3 <=10' /etc/passwd
# awk -F: '!($3 == 20 || $3 <=10)' /etc/passwd
  1. 获得内存使用情况
[root@hadoop101 ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          1861        190       1670          0         11         51
-/+ buffers/cache:        127       1734
Swap:         2047          0       2047
[root@hadoop101 ~]# free -m |awk 'NR==2{print $3*100/$2}'
10.2096
  1. 获得磁盘使用情况
[root@hadoop101 ~]# df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda3       18244476 1998604  15312448  12% /
tmpfs             953140       0    953140   0% /dev/shm
/dev/sda1         194241   35681    148320  20% /boot
[root@hadoop101 ~]# df |awk '/\/$/{print $5}'
12%
[root@hadoop101 ~]# df |awk '/\/boot$/{print $5}'
20%
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值