awk笔记
awk其实是一门编程语言,它支持条件判断、数组、循环等功能。所以,我们也可以把awk理解成一个脚本语言解释器。
grep、sed、awk被称为Linux中的“三剑客”
grep:更适合单纯的查找或匹配文本
sed:更适合编辑匹配到文本
awk:更适合格式化文本,对文本进行较复杂格式处理
awk基础
基本语法:awk [options] ‘program’ file1 , file2 …
$
$num:标识第几列
$0:标识一整行
$NF:标识最后一列
注意:$1这种内置变量的外侧不能加入双引号,否则$1会被当做文本输入
awk’{print $1 $2}'表示每行分割后,将第一列(第一个字段)和第二列(第二个字段)连接在一起输出
awk’{print $1,$2}'表示每行分割后,将第一列(第一个字段)和第二列(第二个字段)以输出分隔符隔开后显示
BEGIN
BEGIN模式:指定了处理文本之前需要执行的操作
END
END模式:指定了处理完所有行之后所需要执行的操作
awk分隔符
FS:输入分隔符
输入分隔符,英文原文为field separator,此处简称为FS
输入分隔符,默认是空白字符(即空格),awk默认以空白字符为分隔符对每一行进行分割。
OFS:输出分割符
输出分割符,英文原文为output field separator,此处简称为OFS
awk将每行分割后,输出在屏幕上的时候,以什么字符作为分隔符,awk默认的输出分隔符也是空格。
awk变量
内置变量
FS:输入分隔符,默认为空白字符
OFS:输出字段分隔符,默认为空白字符
RS:输入记录分隔符(输入换行符),指定输入时的换行符
ORS:输出记录分隔符(输出换行符),输出时用指定符号代替换行符
NF:number of Field,当前行的字段的个数(即当前行被分割成了几列),字段数量
NR:行号,当前处理的文本的行号
FNR:各文件分别计数的行号
FILENAME:当前文件名
ARGC:命令行参数的个数
ARGV:数组,保存的是命令行所给定的各参数
自定义变量
方法一:-v varname=value 变量名区分字符大小写
方法二:在program中直接定义
awk格式化
printf
awk中使用printf动作注意点
- 使用printf动作输出的文本不会换行,如需要换行,可以在对应的“格式替换符”后加入“/n”进入转义
- 使用printf动作时,“指定的格式”与“被格式化的文本”之间,需要用“逗号”隔开
- 使用printf动作时,“格式”中的“格式替换符”必须与“被格式化的文本”一一对应
教程网址:https://www.zsythink.net/archives/1336