第1章 awk指哪打哪

1.1 awk内置变量

FS

输入字段(列)分隔符

-F :

相当于-vFS :

NR

number of record 行号(记录号)

NF

number of filed  每行有多少列

OFS

output 输出分隔符

RS

record separator 记录分隔符每一的结束标记 默认是回车

IGNORECASE

是否忽略大小写  1为忽略

1.1.1 RS    记录分隔符   每一的结束标记默认是回车

[root@zeq files]#cat passwd.txt

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin 默认结束标记是回车,现在文件内容为两行

以/作为记录分隔符,显示行号和文件内容

[root@zeq files]#awk -vRS="/" '{print NR,$0}' passwd.txt NR是显示行号 $0是显示一整行的内容

1root:x:0:0:root:2root:3bin4bash

bin:x:1:1:bin:5bin:6sbin7 nologin 现在以/为记录分隔符就变成了7行

这里的awk -vRS="/" -v给变量赋值,RS是awk内置变量,设置/为记录分隔符

1.2 awk中表示行和列

NR==1

第一行

$1

第一列

$NF

最后一列

$NF-1

倒数第二列

1.3 awk模式匹配(条件)

模式-pattern  帮助你找到想要的行

1)正则表达式

2)比较

>

<

==

3)范围

4)BEGIN{} END{}

1.4 正则表达式

~

某一列中包含xxx

!~

某一列中不包含xxx

^

以....开头的字符(列)

$

以....什么结尾的

.*

所有

^$

空行

转义字符 backslash  脱掉马甲打回原形

[]

匹配[]的每一个字符

+

一个字符出现1次或1次以上

|

或者

()

反向引用,一个整体,保护里面的内容

*

一个字符出现0次或者0次以上

{}

0{n,m} 数字0连续出现了至少n次,最多m次

?

一个字符出现0次或1次

1.4.1 awk正则表达式练习

创建环境

mkdir -p /server/files/cat>>/server/files/reg.txt<

Zhang Dandan41117397 :250:100:175第一列是姓氏

Zhang Xiaoyu390320151 :155:90:201第二列是名字

Meng Feixue80042789 :250:60:50第一第二列合起来就是姓名

Wu Waiwai70271111 :250:80:75第三列是对应的ID号码

Liu Bingbing41117483 :250:100:175最后三列是三次捐款数量

Wang Xiaoai3515064655 :50:95:135Zi Gege1986787350 :250:168:200Li Youjiu918391635 :175:75:300Lao Nanhai918391635 :250:100:175EOF

1.4.2 取出第3列中以数字4开头的行

[root@zeq files]#awk '$3~/^4/' reg.txt $3 第3列 ~ 包括 ^4 以4开头

Zhang Dandan41117397 :250:100:175Liu Bingbing41117483 :250:100:175

1.4.3 显示Xiaoyu的姓氏和ID号码

[root@zeq files]#awk ' $2~/Xiaoyu/{print $1,$3}' reg.txt

Zhang390320151

1.4.4 显示所有以41开头的ID号码的人的全名和ID号码

[root@zeq files]#awk '$3~/^41/{print $1,$2,$3}' reg.txt

Zhang Dandan41117397Liu Bingbing41117483

awk默认动作

[root@zeq files]#awk '$3~/^41/' reg.txt

Zhang Dandan41117397 :250:100:175Liu Bingbing41117483 :250:100:175

[root@zeq files]#awk '$3~/^41/{print }' reg.txt

Zhang Dandan41117397 :250:100:175Liu Bingbing41117483 :250:100:175

1.4.5 显示所有ID号码最后一位数字是1或5的人的全名

方法1

[root@zeq files]#awk '$3~/[15]$/{print $1,$2}' reg.txt []匹配里面的1和5 $表示以...结尾

Zhang Xiaoyu

Wu Waiwai

Wang Xiaoai

Li Youjiu

Lao Nanhai

方法2

[root@zeq files]#awk '$3~/(1|5)$/{print $1,$2}' reg.txt |或者 1或者5

Zhang Xiaoyu

Wu Waiwai

Wang Xiaoai

Li Youjiu

Lao Nanhai

1.4.6 显示Xiaoyu的捐款.每个值时都有以$开头.如$520$200$135

[root@zeq files]#awk -F: -vOFS=$ '/Xiaoyu/{print "$"$2,$3,$4}' reg.txt

$155$90$201 -F指定:为分隔符 -vOFS=$输出$为分隔符

1.5 awk替换

gsub  awk内置函数

1.5.1 格式

gsub(/要替换的内容/,"替换成什么",替换的部分)

1.5.2 接“显示Xiaoyu的捐款.每个值时都有以$开头.如$520$200$135”这一题

[root@zeq files]#awk '{gsub(/:/,"$"); print}' reg.txt 把所有的冒号替换成$

Zhang Dandan41117397 $250$100$175Zhang Xiaoyu390320151 $155$90$201Meng Feixue80042789 $250$60$50Wu Waiwai70271111 $250$80$75Liu Bingbing41117483 $250$100$175Wang Xiaoai3515064655 $50$95$135Zi Gege1986787350 $250$168$200Li Youjiu918391635 $175$75$300Lao Nanhai918391635 $250$100$175

加上条件精确到哪一部分

[root@zeq files]#awk '$2~/Xiaoyu/{gsub(/:/,"$"); print $NF}' reg.txt $NF最后一列

$155$90$201

1.6 范围

1、从第1行到第5行内容

awk  'NR==1,NR==5'

2、从包含某个内容的行到包含某个内容的行

awk  '/内容/,/内容/'

1.6.1 显示从第1行到第5行内容

[root@zeq files]#awk 'NR==1,NR==5' reg.txt

Zhang Dandan41117397 :250:100:175Zhang Xiaoyu390320151 :155:90:201Meng Feixue80042789 :250:60:50Wu Waiwai70271111 :250:80:75Liu Bingbing41117483 :250:100:175

1.6.2 显示包含Xiaoyu到包含Waiwai的行

[root@zeq files]#awk '/Xiaoyu/,/Waiwai/' reg.txt

Zhang Xiaoyu390320151 :155:90:201Meng Feixue80042789 :250:60:50Wu Waiwai70271111 :250:80:75

1.7 比较表达式

$5>500第五列大于500

NR>20大于第20行的行,20行以后>

>=

==

!=不等于<=

<

1.7.1 查看磁盘信息 df -h

[root@zeq files]#df -h

Filesystem Size Used Avail Use%Mounted on/dev/sda3 19G 7.8G 10G 44% /tmpfs 491M 0 491M 0% /dev/shm/dev/sda1 190M 61M 120M 34% /boot/dev/sdb1 193M 1.8M 181M 1% /data

1.7.2 显示出磁盘使用率大于20%的磁盘分区名称和挂载点(错误范例)

[root@zeq files]#df -h|awk '$5>20{print $1,$NF}'

Filesystem on/dev/sda3 /

/dev/sda1 /boot

[root@zeq files]#df -h|awk '$5>9{print $1,$NF}' 这里会默认$5>9是字符串(字母)而不是比较表达

Filesystem on

1.7.3 解决方法1     指定分隔符只保留数字部分

[root@zeq files]#df -h|awk -F"[% ]+" '$5>9{print $1,$NF}'

Filesystem on/dev/sda3 /

/dev/sda1 /boot

想要去掉第一列Filesystem on信息

[root@zeq files]#df -h|awk 'NR>1 && $5+0>9{print $1,$NF}' 第1行以后(&&并且)

/dev/sda3 /

/dev/sda1 /boot

1.7.4 解决方法2    某一列+0

[root@zeq files]#df -h|awk '$5+0>9{print $1,$NF}' 第5列做比较,第5列加0

/dev/sda3 /

/dev/sda1 /boot

1.8 特殊模式 BEGIN{}  END{}

1)awk执行的过程

1.执行命令的参数(赋值) -F -v

2.BEGIN{} 里面的内容 (awk还没有开始读取文件内容)

3.读取文件内容

判断是否满足条件(模式)

符合 执行命令(动作)

不符合  读取下一行直到最后一行

4.文件内容读取完成后,开始执行END{}里面的内容

2)BEGIN{}   里面的内容会在 awk读取文件内容之前执行

1.显示标题

2.修改awk内置变量 创建变量

awk 'BEGIN{OFS=:}'  相当于 awk -vOFS=:

3.测试 计算

3)END{}   awk读取完文件之后 执行

显示计算结果

先计算,END显示结果

1.8.1 统计passwd.txt中虚拟用户的数量

[root@zeq files]#cat passwd.txt 查看文件虚拟用户为nologin

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

统计数量

[root@zeq files]#awk '/nologin$/{i=i+1}END{print i}' passwd.txt i=i+1相当于i++

6

1.8.2 统计/etc/services 文件中空行的数量

[root@zeq files]#awk '/^$/{i++}END{print i}' /etc/services

16

1.9 awk动作

print

gsub 函数 (命令)

变量 计算

1.9.1 计算磁盘使用率

[root@zeq files]#df

Filesystem 1K-blocks Used Available Use%Mounted on/dev/sda3 19534104 8076500 10458644 44% /tmpfs502056 0 502056 0% /dev/shm/dev/sda1 194241 62009 121992 34% /boot/dev/sdb1 197209 1813 185003 1% /data

[root@zeq files]#df |awk 'NR>1{print $3/$2}'

0.41345600.319237

0.00919329

1.9.2 查看内存信息   free    free -h

[root@zeq files]#free

total used free shared buffers cached

Mem:1004112 806016 198096 236 101452 563232

-/+ buffers/cache: 141332 862780Swap:786428 420 786008

1.9.3 计算系统内存的使用率

[root@zeq files]#free |awk '/Mem/{print ($3-$6-$7)/$2}'

0.140705[root@zeq files]#free|awk 'NR==3{print $3/($3+$4)}'

0.140705

1.9.4 计算系统内存的剩余率

[root@zeq files]#free|awk 'NR==3{print $4/($3+$4)}'

0.859211

1.9.5 设置变量计算系统内存的使用率和剩余率

[root@zeq files]#free|awk 'NR==3{sum=$3+$4;print $3/sum,$4/sum}' sum为变量

0.140765 0.859235

linux三剑客试题,linux三剑客-awk相关推荐

  1. linux三剑客试题,Linux三剑客(grep、sed、awk)详解

    Linux三剑客(grep.sed.awk)详解 前言:本文主要介绍一下Linux中最重要的三个命令,他们在业界被誉为"三剑客",它们分别是:awk,sed,grep.它们三个侧能 ...

  2. linux系统管理员试题,Linux系统管理员测试题及答案

    Linux系统管理员测试题及答案 1 下列那一个是挂载档案系统(mounted filesystems)的设定档? (1) /etc/fstab (2) /etc/sysconfig (3) /etc ...

  3. 04-Linux之Linux软件安装、三剑客和Shell编程

    1.9 Linux的软件安装 1.9.1 环境变量的配置 环境变量是指 当我们配置了环境变量后, 执行相应的命令,告诉系统命令搜索的文件夹,当我们执行一个命令的时候,默认从当前路径开始查找,如果当前路 ...

  4. Linux下传说中的三剑客

    大家好!我是木荣. 今天给大家聊一聊Linux中文本操作的三剑客:awk.grep.sed,因其功能强大.使用频繁,且是Linux下文本处理的得力利器,常被称之为文本三剑客.grep常用于查找,sed ...

  5. 这27道Linux面试题,据说能回答上20道算优秀哦!

    出处 Kali技术. 这27道Linux面试题,据说能回答上20道算优秀哦![EB|OL] 2019-04-26 https://www.toutiao.com/a668402635923416730 ...

  6. linux面试题-基础题1

    linux面试题-基础题1 第1章 基础题1 1.1 在装系统创建Linux分区时,一般至少需要创建两个分区( ) A.FAT.NTFS   B. /usr.swap    C. /boot.swap ...

  7. linux sed面试题,【2021最新版】Linux面试题总结(48道题含答案解析)

    文章目录 1.绝对路径用什么符号表示?当前目录.上层目录用什么表示?主目录用什么表示? 切换目录用什么命令? 2.怎么查看当前进程?怎么执行退出?怎么查看当前路径? 3.怎么清屏?怎么退出当前命令?怎 ...

  8. Linux面试题100道

    导读:本文整理了最新的Linux面试题,近3万字,约100道题,分享至此,希望对大家有帮助. 目录 一.Linux 概述 二.磁盘.目录.文件 三.安全 Shell 四.编程题 七.文档编辑命令 八. ...

  9. linux面试题_2019年常见的Linux面试题及答案解析,哪些你还不会?

    Linux 面试题 1.绝对路径用什么符号表示?当前目录.上层目录用什么表示?主目录用什么表示? 切换目录用什么命令? 2.怎么查看当前进程?怎么执行退出?怎么查看当前路径? 3.怎么清屏?怎么退出当 ...

最新文章

  1. 深度学习中的卷积网络简介
  2. STM32 基础系列教程 14 - IIC
  3. include/caffe/common.cuh(9): error: function atomicAdd(double *, double) has already been defined
  4. json传输二进制的方案(python版)
  5. 2 自动递增_有石CAD自动下单,1天工作量1小时完成
  6. 避免活跃性危险(第十章)
  7. 华为EMUI10带来开发者福音:一次开发多端部署
  8. 【转】内核通信之 Netlink 源码分析和实例分析
  9. 提取点位属性文本_手把手教你如何用Python爬取网站文本信息
  10. ORACLE中null的排序问题
  11. js 对一个字段去重_写一个N-API没那么难?
  12. 实验四:用一维数组输出等腰三角形的杨辉三角
  13. 计量经济学搭建模型总结
  14. ie7/8卸载工具 降级到IE6
  15. CentOs7中安装python模块psycopg2,报错Error: pg_config executable not found.
  16. 【Python基础】初识-与君初相识,犹如故人归
  17. 全网最全编程学习网站汇总
  18. 计算机科学家的名言警句,【实用】励志的格言70句
  19. 2021年浙大考研计算机专业录取分数线,浙江大学2021年计算机考研拟录取数据分析...
  20. petalinux2018.3安装步骤

热门文章

  1. 项目中使用RDLC报表
  2. 背景-需要-需求规格
  3. 安装 Go 第三方包 go-sqlite3
  4. Linux安装composer出现usr/bin/env: php: No such file or directory)
  5. Git的pull clone fetch
  6. Browser控制台分析
  7. nodejs redis 发布订阅_太赞了:Spring boot+redis实现消息发布与订阅
  8. linux上卸载kafka,kafka安装在linux上的安装
  9. 苹果mac休眠快捷键_Mac技巧|如何高效使用苹果便笺?用便笺快捷键快速完成操作...
  10. java把一个list_java 把一个大list分成N个小list,然后用map存储的小方法