前言
awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件awk命令,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,比如数组、函数等awk命令,这是它和C语言的相同之处,灵活性是awk最大的优势。
awk命令格式
awk [options] 'script' var=value file(s)
awk [options] -f scriptfile var=value file(s)
-F fs fs指定输入分隔符,fs可以是字符串或正则表达式
-v var=value 赋值一个用户定义变量,将外部变量传递给awk
-f scriptfile 从脚本文件中读取awk命令
其中格式:awk脚本是由模式和操作组成的。
awk脚本基本格式
awk 'BEGIN{ commands } pattern{ commands } END{ commands }' file
// 一个awk脚本通常由BEGIN,通用语句块,END语句块组成,三部分都是可选的。
// 脚本通常是被单引号或双引号包住。
awk 'BEGIN{ i=0 } { i++ } END{ print i }' filename
awk "BEGIN{ i=0 } { i++ } END{ print i }" filename
awk执行过程分析
第一步: 执行BEGIN { } 语句块中的语句
第二步:从文件或标准输入中读取一行,然后执行{ }语句块。它逐行扫描文件,从第一行到最后一行重复这个过程,直到全部文件都被读取完毕。
第三步:当读至输入流末尾时,执行END { }语句块
awk内置变量
$n : 当前记录的第n个字段,比如n为1表示第一个字段,n为2表示第二个字段。
$0 : 这个变量包含执行过程中当前行的文本内容。
ARGC : 命令行参数的数目。
ARGIND : 命令行中当前文件的位置(从0开始算)。
ARGV : 包含命令行参数的数组。
CONVFMT : 数字转换格式(默认值为%.6g)。
ENVIRON : 环境变量关联数组。
ERRNO : 最后一个系统错误的描述。
FIELDWIDTHS : 字段宽度列表(用空格键分隔)。
FILENAME : 当前输入文件的名。
NR : 表示记录数,在执行过程中对应于当前的行号
FNR : 同NR :,但相对于当前文件。
FS : 字段分隔符(默认是任何空格)。
IGNORECASE : 如果为真,则进行忽略大小写的匹配。
NF : 表示字段数,在执行过程中对应于当前的字段数。 print $NF答应一行中最后一个字段
OFMT : 数字的输出格式(默认值是%.6g)。
OFS : 输出字段分隔符(默认值是一个空格)。
ORS : 输出记录分隔符(默认值是一个换行符)。
RS : 记录分隔符(默认是一个换行符)。
RSTART : 由match函数所匹配的字符串的第一个位置。
RLENGTH : 由match函数所匹配的字符串的长度。
SUBSEP : 数组下标分隔符(默认值是34)。
将外部变量值传递给awk
VAR=10000
echo | awk -v VARIABLE=$VAR '{ print VARIABLE }'
var1="aaa"
var2="bbb"
echo | awk '{ print v1,v2 }' v1=$var1 v2=$var2
awk '{ print v1,v2 }' v1=$var1 v2=$var2 filename
awk运算
所有用作算术运算符进行操作时,操作数自动转为数值,所有非数值都变为0
awk 'BEGIN{a="100testa";if(a ~ /^100*/){print "ok";}}'
ok
awk高级输入输出
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。