Linux命令详解之mawk

本文发布时间: 2019-Mar-22
pattern scanning and text processing language语法:mawk [-F value] [-v var=value] [--] 'program text' [file...]mawk [-F value] [-v var=value] [-f program-file] [--] [file...]描述:awk是一种文本数据处理语言,而mawk是针对这种语言的一种解释器。awk程序由pattern{action}序列及函数定义组成。输入的数据根据RS(Record seperator,默认=‘\n’)划分为逐个的记录,每个记录均与pattern进行比较,若匹配,执行相应action。选项:-F设置field seperator,FS,根据该值将record分为field-fawk程序文件-v var=value设置程序变量--指示mawk命令的选项说明结束下面介绍AWK语言1,程序结构前面提到,awk程序由pattern{action}序列或函数定义组成。其中,pattern可以是BEGINENDexpressionexpression, expression若action省略,隐含执行print,若pattern省略,则隐含为匹配正确。语句根据换行符及分号判断为结束。使用#进行注释控制流包括if(expr) statementif( expr ) statement else statementwhile ( expr) statementdo statement while (expr)for(opt_expr ; opt_expr; opt_expr) statementfor(var in array) statementcontinuebreak2,数据类型,转换和比较有数值类型及字符串类型两种,其中,所有数字都用浮点数进行表示并完成计算。3,正则表达式expr ~ /r/正则表达式用斜线括住,若expr服从该正则表达式,则为真,否则为假。不服从用“!~”表示。/r/ {action}与$0 ~ /r/ {action}等价。4,Records与Fields一次读一行,即一个Records,并根据FS划分为Fields,$0表示整个Records,$1,$2,...,$NF分别代表对应的Field,内置变量NF为field的总数,高于NF的Fields设置为“”NR及FNR每次增加1,所代表含义后文中有说明。给上述内置变量赋值,会导致相关变量发生变化。5,表达式和操作符与C语言中操作符大部分一致,特殊的有in(array membership)、~(!~,matching)、$(field)。6,数组awk提供一维数组,使用A[1]或A["1"]访问元素delete array[expr]会删除相应元素if( ( i, j) in A ) print A[i, j]7,内置变量CONVFMT:数值到字符串的内部转换格式,默认=“%.6g”ENVIRON:环境变量数组,var=value被存储为ENVIRON[var]=valueFILENAME:当前输入文件的名字FNR:在FILENAME文件中的当前记录序号FS:field分隔符,可以是正则表达式NF:当前记录的field总数NR:在所有输入流中的record numberOFMT:输出数值格式,默认为“%.6g”OFS:输出时采用的field分隔符,默认为空格ORS:输出时record分隔符,默认为换行符RS:输入时的record分隔符,默认为换行SUBSEP:used to build multiple array subscripts,默认为“\034”8,内置函数(1)字符串处理函数gsub(r, s, t) gsub(r, s)将t变量中匹配r的字符替换为s,若未指明t,则隐含为$0。最后返回替换数量。index(s, t)返回s中t第一次出现的位置,否则返回0,s的第一个字符下标为1length(s)返回s的长度match(s,r)返回s中r的最长匹配下标,无匹配返回0.split(s,A,r) split(s,A)根据r将s划分至A,并返回fields数量,若未设定r,则使用FSsprintf(format, expr-list)根据format构造字符串sub(r,s,t) sub(r,s)只完成一次替换substr(s,i,n) substr(s,i)返回s由i至长度为n的子字符串tolower(s)toupper(s)(2)数值处理函数atan2(y,x)cos(x)exp(x)int(x)log(x)rand()sin(x)sqrt()srand(expr) srand()9,输入与输出输出有print与printfprint输出$0print expr1, expr2, ... , exprnprintf format, expr-list输入为getlinegetline读入一行至$0getline < file从file中读入$0getline var读下条记录至vargetline var < file从file中读取下一条record至varcommand | getline执行command,并从管道中读取一条record至$0command | getline var执行command,并从管道中读取一条record至vargetline遇到end-of-file时,返回0,错误返回-1,正确返回1close(expr)关闭与expr联系的file或pipefflush(expr)system(expr)执行expr,并返回状态10,用户自定义函数语法为function name (args) {statements}可以包含return opt_expr11,分割字符串,记录,文件12,多行records的处理13,程序执行首先会执行BEGIN然后逐个根据中间的pattern{action}处理各个record其中可以通过nextexit opt_expr改变pattern级别的程序执行顺序,碰到next直接read下一条record,并从BEGIN之后继续执行;exit立即调用END对应的actions,opt_expr为退出码。最后执行END


(以上内容不代表本站观点。)
---------------------------------
本网站以及域名有仲裁协议。
本網站以及域名有仲裁協議。

2024-Mar-04 02:10pm
栏目列表