一、awk工具
1. awk概述
awk是一个系统自带的、具有强大功能的处理工具,提供编程语言的功能,比如自定义变量、数学运算、字符串处理等,常见的用法是对文本文件进行按行取列。
2. awk命令 – 对文本和数据进行处理
awk命令的功能是对文本和数据进行处理,可以自定义函数或使用正则表达式,匹配指定的文本内容来操作。
awk 选项 '[模式或条件] {操作符}' 文件
常见的选项:
选项 | 功能 |
---|---|
-F | 设置字段分隔符 |
-v | 给变量赋值 |
常见的操作符:
操作符 | 功能 |
---|---|
打印输出 | |
printf | 格式化打印输出 |
awk工具还有着内置变量:
内置变量 | 功能 |
---|---|
$0 | 表示整行 |
$n | 表示第n列 |
NR | 表示行号 |
NF | 表示行的字段个数 |
FS | 表示列分隔符 |
二、awk常见操作
-
打印文件全部内容。
awk '{print}' test.txt # 或者 awk '{print $0}' test.txt
-
打印文件行号和内容。
awk '{print NR,$0}' test.txt
-
打印第1行到第3行内容。
awk 'NR==1,NR==3 {print}' test.txt # 或者 awk 'NR==1 && NR==3 {print}' test.txt
-
打印第1行和第3行内容。
awk 'NR==1;NR==3 {print}' test.txt # 或者 awk 'NR==1 || NR==3 {print}' test.txt
-
打印奇数行或者偶数行内容。
awk 'NR%2==1 {print}' test.txt # 奇数行 awk 'NR%2==2 {print}' test.txt # 偶数行
-
使用BEGIN模式和END模式计算1~10的总和。
awk 'BEGIN{sum=0};{sum=sum+$1};END{print sum}' test.txt
- BEGIN模式是作用在操作符开始之前,一些初始化操作,比如设置行和列的分隔符、初始化自定义变量等可以写在在BEGIND模式中,语法上也是BEGIN模式在最前面。
- END模式和BEGIN模式相反,作用于程序即将结束退出的时候,通常是打印输出设置在END模式当中,这样awk就只会输出最后的结果,语法上是放在最后面的。
- BEGIN模式和END模式和awk要执行的具体操作是写在中间部分,包括写条件语句等。
-
打印第3行的第3列.
awk -F : 'NR==3 {print $3}' test.txt
- -F用于设置列分隔符,awk默认的列分隔符是空格。
-
结合三元运算符打印输出UID和GID相同的/etc/passwd文本内容。
# 三元运算符格式:条件?条件为真的结果:条件为假的结果 awk -F: '{res=($3==$4)?$3:$4;{print res}}' /etc/passwd
-
字符串的模糊匹配和精确匹配。
$n~"字符串" #第n列包含字符串 $n!~"字符串" #第n列不包含字符串 $n=="字符串" #第n列是字符串 $n!="字符串" #第n列不是字符串