1、awk的简介
其实一门编程语言,支持条件判断,数组,循环等功能,与grep,sed被称为linux三剑客之所以AWK是因为取其三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的Family Name的首字符
2、awk的应用场景
通常对数据进行列的提取
3、语法
awk '条件 {执行动作}'文件名
awk '条件1 {执行动作} 条件2 {执行动作} ...' 文件名
或awk [选项] '条件1 {执行动作} 条件2 {执行动作} ...' 文件名
4、相关指令
第一部分:awk初级使用
知识要点:
- awk 默认以空格作为分隔符
- awk 可以使用 -F 指定分隔符
符号 | 含义 |
---|---|
-F | 指定分隔符 |
$1 | 代表第一列 |
$2 | 代表第二列 |
$0 | 代表一整行 |
awk ‘{print}’ 1.txt #逐行读取文件1.txt内容并打印
awk ‘{print $0}’ 1.txt #逐行读取文件内容,并打印该行,$0保存的是当前行的内容
awk ‘{print “hello”}’ 1.txt #逐行读取1.txt文件内容,每行结束后打印一个hello
awk ‘{print $1}’ 1.txt #打印1.txt的第一列内容,在不指定分割符的情况下,awk默认使用空白做分割符
awk -F “:” ‘{print $1}’ /etc/passwd #以":"为分隔符打印/etc/passwd文件的第一列内容
第二部分: awk高级使用
知识点:
指令 | 含义 |
---|---|
BEGIN | 在读取所有行内容前就开始执行,常常被用于修改内置变量的值 |
FS | BEGIN时定义分割符 |
END | 结束的时候 执行 |
NR | 记录的是当前行的行号 |
NF | 记录的是当前行中有多少列 |
$NF | 记录的是当前行最后一列的内容 |
在awk中使用正则匹配,正则表达式必须要放在//中
awk ‘/123/{print}’ 1.txt #打印1.txt中匹配123的那一行内容
awk提供了多个比较操作符:"==" “>” “<” “<=” “>=” “!=” "~"匹配 "!~"不匹配
awk ‘BEGIN{ FS=":"} $1 == “root” {print $3}’ /etc/passwd #以":"为分隔符,打印/etc/passwd中第一列是root的当前行的第三列
awk ‘BEGIN {FS=":"} {if ($1 ~ “root”) {print $2}}’ /etc/passwd #以":"为分隔符,打印/etc/passwd文件中第一列
awk ‘/ock/{print NF}’ 1.txt # 统计匹配ock的行有多少列
awk ‘NF == 3 {print}’ 1.txt #打印1.txt中有3列的行的内容
awk ‘{if (NR > 3) {print $NF} }’ 1.txt # 输出1.txt中行号大于3的行,其最后一列的内容
awk ‘{if (NR > 3) {print NR".\t"$0} }’ 1.txt #格式化输入1.txt中行号大于3的行的行号和内容