参考:https://blog.51cto.com/13691477/2115568
1.awk简介
Linux运维三剑客:grep、sed、awk
grep:更适合单纯的查找或匹配文本
sed:更适合编辑匹配到的文本
awk:更适合格式化文本,对文本进行较复杂的格式处理
awk是一个报告生成器,它拥有强大的文本格式化能力。由Alfred Aho、Peter Weinberger和Brian Kernighan这三个人创造的,awk由这三个人的姓氏的首字母组成。
awk语法:awk [options] ‘Pattern{Action}’ file,即至少包括awk ” file三部分
awk是逐行处理的,默认以“换行符”为标记识别每一行,也就是说每遇到换行符就代表一行的结束,新行的开始。awk会按照指定的分隔符分割当前行,如果没有指定,默认空格为分隔符。
2.awk分隔符
分隔符分为”输入分隔符”和”数出分隔符”:
输入分隔符:field separator,简称FS(默认为空格,即空白字符),如:awk -F# ‘{print $1,$2}’ file,此处用-F指定分隔符为#,也可以用这种格式 -v FS=’#’,如:awk -v FS=’#’ ‘{print $1,$2}’ file
输出分隔符:output field separator,简称OFS(默认也是空格),如:awk -v OFS=’#’ {print $1,$2} file
2.变量
2.1内置变量
$0表示整行,同$n,
$NF表示当前行分割后的最后一列,
FS: 输入字符分割符
OFS:数出字符分隔符
RS:输入记录分隔符(输入换行符),指定输入时的换行符
ORS: 数出记录分隔符(数出换行符),输出时指定符号代替符
NF: number of Field,表示字段数量,即当前行被分隔符分割后共有几个字段,用$(NF-n)可表示当前行某个字段值。
NR: 行号,当前处理文本行的行号
FNR: 各文件分别计数的行号
FILENAME:当前文件名
ARGC:命令行参数的个数
ARGV:数组,保存命令行参数值
2.2、自定义变量
方法一:-v varname=value 变量名区分大小写,如:awk -v myvar=”testcontent” ‘BEGIN{print myvar}’,myvar=后面可以是变量如:$?
方法二:在program中直接定义,如:awk ‘BEGIN{ myvar=”1″; print myvar}’,可同时定义多个变量
3.模式
awk语法:awk [options] ‘Pattern{Action}’ file1,file2…
Pattern即为模式:awk特殊模式:BEGIN和END
BEGIN模式指定了处理文本之前需要执行的操作,如:awk ‘BEGIN{print “123”,”456″}{print $n}’ filename
END模式指定了处理完文本之后需要执行的操作,如:awk ‘{print $n}END{print “abc”,”edf”}’ filename
printf命令
语法:prinft “指定的格式” “文本1” “文本2” “文本3” ……
printf可以按照我们指定的格式输出文本,具有格式化输出文本的能力。与echo不同的是,echo数出文本自动换行,printf则不会,可在尾部使用转义符\n,如:printf “test\n”
%s:代表传入的参数,%s\n:代表将每一个传入的参数格式化为换行
修饰符:数字,-,+
%7s:在%s中的替换符s前加上数字(或者叫修饰符),表示当前替换符对应的输出宽度为7个字符宽,如果输出不足7个字符,则用空格补全,如果超出7个字符,超出部分也会显示出来
%-7s:”-“表示左对齐,默认不加”-“时表示右对齐,”-“也属于修饰符
%+7s:”+”表示若输出中显示数字,且为正数时,前面会自动加上+,如:+11
%12.3f:表示对应的替换符”%f”的输出宽度为12个字符,小数点精确度为3
%12.5d:小数点后的数字表示整数长度,长度不够时用0补全,如:printf
常用格式替换符:
%s 字符串
%f 浮点格式(float或double)
%b 相对应的参数中包含转义字符时,可以使用此替换符进行替换,对应的转义符会被转义
%c ASCII字符,显示相对应参数的第一个字符
%d,%i 十进制整数
%o 不带正负号的八进制值
%u 不带正负号的十进制值
%x 不带正负号的十六进制值,使用a至f表示10到15
%X 不带正负号的十六进制值,使用A至F表示10到15
%% 表示”%”本身
常用转义符:
\a 警告字符,通常为ASCII的BEL字符
\b 后退
\c 抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略
\f 换页(formfeed)
\n 换行
\r 回车
\t 水平制表符
\v 垂直制表符
\\ 一个字面上的反斜杠字符,即”\”本身
\ddd 表示1到3位数八进制的字符,仅在格式字符串中有效
\0ddd 表示1到3位的八进制字符
评论前必须登录!
注册