目录
一、awk简介
awk是linux的一个强大的命令,具备强大的文本格式化能力,比如对一堆看起来没有什么规律的日志文件,文本文件等,通过awk命令格式化输出为专业的可以做为应用级数据分析的样式。
二、awk工作原理
逐行读取文本,默认以空格或制表符为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。
sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个“字段”,然后再进行处理。awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。
在使用awk命令的过程中,可以使用逻辑操作符"&&"表示"与"、"||"表示"或"、"!"表示"非",还可以进行简单的数学运算,如+、-、*、/、%、^分别表示加、减、乘、除、取余和乘方
三、awk命令格式
awk [选项] '模式或条件 {操作表达式}' 文件名...
awk常用选项
选项 | 作用 |
---|---|
-F | 后面跟符号,指定列分隔符 |
-v | 后面跟变量,允许使用变量 |
awk常见内建变量
内建变量 | 作用 |
---|---|
FS | 列分隔符,指定每行文本的字段分隔符(默认为空格和制表符)。 与-F 选项作用相同 |
OFS | 输出内容的列分隔符 |
NF | 当前处理行的字段个数 $NF可以表示最后一行 |
NR | 指定当前处理的行的行号 |
$0 | 当前处理的行的整行内容 |
$n | 当前处理行的第n个字段 |
RS | 行分隔符,指定航分隔符(默认是换行符"\n") |
四、awk命令的使用
1.print操作按行输出文本
//1.输出所有内容
[root@localhost1 ~]#awk '{print}' numfile
one
two
three
four
five
six
seven
eight
nine
ten
[root@localhost1 ~]#awk '{print $0}' numfile #$0代表匹配到的整行
one
two
three
four
five
six
seven
eight
nine
ten
//2.指定行,输出1~3行内容
[root@localhost1 ~]#awk 'NR==1,NR==3 {print}' numfile
one
two
three
[root@localhost1 ~]#awk '(NR>=1)&&(NR<=3) {print}' numfile
one
two
three
//3.指定的几行,输出第1、3行
[root@localhost1 ~]#awk 'NR==1||NR==3 {print}' numfile
one
three
//4.输出奇偶行
[root@localhost1 ~]#awk '(NR%2)==0 {print}' numfile
two
four
six
eight
ten
[root@localhost1 ~]#awk '(NR%2)==1 {print}' numfile
one
three
five
seven
nine
//5.输出行号
[root@localhost1 ~]#awk '{print NR,$0}' file1
1 one two three
2 four five six
3 seven eight nine
4 ten eleven twelve
//6.指定第1行包含o的行。输出行号和内容
[root@localhost1 ~]#awk '$1~"o" {print NR,$0}' file1
1 one two three
2 four five six
//7.指定输出包含指定字符串的行
[root@localhost1 ~]#awk '/root/ {print}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
op