目录
一、awk基本概念:
awk是一门编程语言,善于处理大量文本。
1、语法格式
awk [参数] ‘条件{动作}’ 文本 ...
2、核心作用:
1)取列
3、附加作用:
删、查
4、【参数】
-F | 指定字段分隔符 |
-v | 定义或修改一个awk内部的变量 |
变量名 | 属性 |
$n | 当前记录的第n个列,字段间由FS或-F参数指定分隔符 |
$0 | 当前整行记录 |
NF | 当前记录中的列的个数,就是有多少列 |
$(NF-n) | 倒数第n列,n为数字 |
NR | 已经督促的记录数,就是行号,从1开始 |
默认分隔符就是空格:第2列是00
11 00 22
第1列:$1
第2列:$2
二、入门练习:
1、打印a.txt中的第2列:
2、打印多列
3、打印整行记录
4、打印最后一列
5、打印倒数第2列
三、参数练习:
1、-F案例:
1、取出test.txt中的第1列
2、取出第1列和最后一列,并显示有多少列
四、练习题:
首先准备好测试文件,取passwd文件前5行
sed -n '1,5p' /etc/passwd >test.txt
1、取test.txt文件的第2行到第3行的内容。(提示:如果只取某一行,就用awk 'NR==2' test.txt)
方法一:
![](https://i-blog.csdnimg.cn/blog_migrate/0445989c5f0abc28160b66821d72d633.png)
方法二:
![](https://i-blog.csdnimg.cn/blog_migrate/0f5fc3a87a73d8ad9e8f7fcf476b31dd.png)
方法三:(并打印行号)
![](https://i-blog.csdnimg.cn/blog_migrate/941ab808b077f2b9246f185d461d7540.png)
2、过滤出含有root字符串的行
![](https://i-blog.csdnimg.cn/blog_migrate/687e04e9cff8b89378b29baa9a3302c9.png)
3、删除含有root字符串的行
4、取文件的第1列、第3列和最后1列的内容,并打印行号
![](https://i-blog.csdnimg.cn/blog_migrate/5a5a6ceae8e4dd3cddce3397d2f9f5b0.png)
5、取出Linux中执行ifconfig ens33后对应的IP地址(只能输出ip地址)
这将使用awk命令来查找带有 "inet " 开头的行,并打印第二个字段,即IP地址
sed方法:
五、多个连续分隔符
案例一:
案例二、
案例三、(先取行,在取列)
例题1:过滤文件中第一列内容匹配root的字符串,把符合的行的最后一列输出。
解答:这道题在过滤日志信息的时候常用,示例如下。
例题2:过滤下列test1.txt文件中第三列内容分数大于70,并且小于95的人名和性别。
张三 男 80
李四 女 70
王五 男 90
赵六 女 100
六、带条件的awk深入知识与实践
行的条件
stat /etc/hosts|awk -F 'NR==4' #取第4行
[root@ql ~]# stat /etc/hosts|awk -F "[0/]" 'NR==4 {print $2}' #取第4行的第2列