Linux awk命令 --三剑客老大
Linux awk命令 --三剑客老大
基本用法:
awk [参数] ['找谁{干啥}'] 文件
参数:
-F 分隔符
-v 创建或修改awk变量
OFS 输出分割符 awk显示每一列的时候分隔
'找谁{干啥}'
找谁==条件
比较表达式:
== 等于
>= 大于等于
<= 小于等于
> 大于
< 小于
注:如果列不止数字,想只比较数字的话。可以用+0方法。eg:'$5+0>10'
正则表达式:
~ 表示包含或匹配
示例:awk '$1~/\/dev\/sda1/{print $2,$NF}' df.txt
!~ 不包含或不匹配
正则
^ 是哪一列的开头
$ 是哪一列的结尾
范围:
‘NR==1,NR==5’ 第1行到第3行
'$3==0,$3==1000' 第3列等于0到第3列等于1000
'/那个字符/,/到那个字符/'
注:不贪婪匹配,但可以匹配多次
特殊:
&& 并且
|| 或者
BEGIN{} BEGIN 里面的内容会在awk读取文件之前执行
END{} awk读取文件内容之后执END内容
{干啥==动作}
默认 '{print $0}'
$0 显示整行
$num 显示第num列
$NF 显示最后一列
$(NF-1) 显示倒数第2列
NR 显示行号
gsub()
条件:gsub(/找谁/,"替换为",哪一列)
注:有两个动作以上,需要用;分割
例题:
1.显示/etc/passwd及行号
[root@maintain data]# awk -F':' '{print NR,$0}' /etc/passwd
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
games:x:::games:/usr/games:/sbin/nologin
ftp:x:::FTP User:/var/ftp:/sbin/nologin
nobody:x:::Nobody:/:/sbin/nologin
systemd-network:x:::systemd Network Management:/:/sbin/nologin
dbus:x:::System message bus:/:/sbin/nologin
polkitd:x:::User for polkitd:/:/sbin/nologin
sshd:x:::Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x::::/var/spool/postfix:/sbin/nologin
ntp:x::::/etc/ntp:/sbin/nologin
2.显示/etc/passwd 第1列,第3列 倒数二列和最后一列
[root@maintain data]# awk -F':' '{print $1,$3,$(NF-1),$NF}' /etc/passwd
root /root /bin/bash
bin /bin /sbin/nologin
daemon /sbin /sbin/nologin
adm /var/adm /sbin/nologin
lp /var/spool/lpd /sbin/nologin
sync /sbin /bin/sync
shutdown /sbin /sbin/shutdown
halt /sbin /sbin/halt
mail /var/spool/mail /sbin/nologin
operator /root /sbin/nologin
games /usr/games /sbin/nologin
ftp /var/ftp /sbin/nologin
3.显示出/etc/passwd中 第3列大于80的行
条件:第3列大于80
$3>80
动作:不写(默认{print $0})
[root@maintain data]# awk -F':' '$3>80' /etc/passwd
nobody:x:::Nobody:/:/sbin/nologin
systemd-network:x:::systemd Network Management:/:/sbin/nologin
dbus:x:::System message bus:/:/sbin/nologin
polkitd:x:::User for polkitd:/:/sbin/nologin
postfix:x::::/var/spool/postfix:/sbin/nologin
4.显示磁盘使用率 大于10% 的磁盘分区和挂载点(目录)
条件:使用率大于10
$5>10
动作:显示磁盘分区和挂载点
print $1,$NF
[root@maintain data]# df | awk '$5+0>10'
/dev/sda2 10G .4G .7G % /
/dev/sda1 497M 117M 381M % /boot
5.创建一个test文本,包括以下内容:
Zhang Dandan 41117397 :250:100:175
Zhang Xiaoyu 390320151 :155:90:201
Meng Feixue 80042789 :250:60:50
Wu waiwai 70271111 :250:80:75
Liu Bingbing 41117483 :250:100:175
Wang Xiaoai 3515064655 :50:95:135
Zi Gege 1986787350 :250:168:200
Li Youjiu 918391635 :175:75:300
Lao Nanhai 918691635 :250:100:175
说明:第1列是姓,第2列是名字,第3列是ID,第4列是三次捐款
a.显示所有以一个D或X开头的人名全名
条件:名字以D或X开头
$2~/^[DX]/
动作:显示全名
print $1,$2
[root@maintain data]# awk '$2~/^[DX]/{print $1,$2}' reg.txt
Zhang Dandan
Zhang Xiaoyu
Wang Xiaoai
b.显示所有ID号码最后一位数字是1或5的人的全名
条件:ID号码最后一位数字是1或5
$3~/[15]$/
动作:显示全名
print $1,$2
[root@maintain data]# awk '$3~/[15]$/{print $1,$2}' reg.txt
[root@maintain data]# awk '$3~/(1|5)$/{print $1,$2}' reg.txt
[root@maintain data]# awk '$3~/1$|5$/{print $1,$2}' reg.txt
Zhang Xiaoyu
Wu waiwai
Wang Xiaoai
Li Youjiu
Lao Nanhai
c.显示Xiaoyu的捐款,每个值时都有以$开头,如$520$200$135
gsub(/找谁/,"替换为",哪一列)
条件:Xiaoyu的
$2~/Xiaoyu/
动作:捐款每个值以$开头
gsub(/:/,"$",$NF)
[root@maintain data]# awk '$2~/Xiaoai/{gsub(/:/,"$",$NF);print $0}' reg.txt
Wang Xiaoai $$$
d.显示所有人的全名,以姓,名的格式显示,如Meng,Feixue
条件:无
动作:姓与名有个,连接
','
[root@maintain data]# awk '{print $1","$2}' reg.txt #双引号,引住的就是原输出
[root@maintain data]# awk -v OFS=',' '{print $1,$2}' reg.txt #OFS 输出分割符 awk显示每一列的时候分隔符
Zhang,Dandan
Zhang,Xiaoyu
Meng,Feixue
Wu,waiwai
Liu,Bingbing
Wang,Xiaoai
Zi,Gege
Li,Youjiu
Lao,Nanhai
6.统计 /etc/services 文件中空行的数量
[root@maintain data]# awk '/^$/{i++}END{print i}' /etc/services
最新文章
- 保持Qt GUI响应的几种方法
- hadoop生态圈介绍
- php集成动态口令认证
- Windows 磁盘检查命令
- PHP使用session_set_save_handler陷阱
- qemu-kvm简单使用
- UML系列01之 UML用例图
- leetcode先刷_Path Sum
- nyoj 破门锁(水题)
- Educational Codeforces Round 32 E. Maximum Subsequence
- libsecp256k1 与 openssl ecdsa
- Spring Boot - 配置介绍
- 1、从C语言到C++
- Css基础笔记(部分)
- RDD PAPER
- MyBatis入门(一)—— 入门案例
- MySQL(一)索引的创建和删除
- xgboost: 速度快效果好的boosting模型
- java 注解详解
- Java线程常用方法详解