awk命令之基础篇

本文发布时间: 2019-Mar-22
基本命令awk'{action}' 输入文件无条件执行actionawk '/pattern/{action}' 输入文件pattern匹配时执行actionawk '(condition){action}' 输入文件condition成立时执行actionawk '/李四/{print $0}' tmp//输出含有‘李四’关键字的一行记录2 李四 70awk '/^2/{print $0}' tmp//输出以2开头的一行记录2 李四 70关于字段:awk命令会读入的每一行分割成多个字段,每一字段是由指定或默认分隔符分开,默认的分隔符是tab和空格,可以用$1,$2,等的形式访问对应字段,字段都是从1开始的,而$0表示整个行内置变量$0当前的一行记录$1~$n当前记录的第n个字段,字段间由FS分隔FS输入字段分隔符,默认是空格RS输入记录分隔符,默认为换行符OFS输出字段分隔符 默认也是空格ORS输出记录分隔符,默认为换行符NF当前记录中的字段个数FNR处理过的文件行数,仅限当前文件NR处理过的文件行数,多个文件累加ARGC命令行参数个数ARGV 命令行参数数组FILENAME当前输入文件的名字IGNORECASE 设置匹配时是否忽略大小写ENVIRONUNIX环境变量ERRNOUNIX系统错误消息CONVFMT数字到字符串的转换格式OFMT设置数字的输出格式RSTART被匹配函数匹配的字符串首RLENGTH 被匹配函数匹配的字符串长度FIELDWIDTHS输入字段宽度的空白分隔字符串ARGIND当前被处理文件的ARGV标志符 tmp文件内容有:id,name,scoreawk '{print FILENAME,ARGC,ARGV[0],ARGV[1]}' tmptmp 2 awk tmpawk -F ',' '{print NF,FS,FNR,FS,NR,RS}' tmp tmpps:-F,指定逗号为字段分隔符3 , 1 , 13 , 1 , 2 awk '{print ENVIRON["PATH"]}' tmp/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/gamesawk '{CONVFMT="%f";printf "%s\n",0.11}' tmp0.110000awk '{OFMT="%0.2f";print 1/3}' tmp0.33awk '{match("tmp123tmp", /123/); print RSTART,RLENGTH}' tmp4 3运算符=,+=,-=,*=,/=,%=,^=赋值语句||逻辑或&&逻辑与~ ~! 匹配正则表达式和不匹配正则表达式<,<=,>,>=,!=,==关系运算符+,-,*,/,加减乘除**,^求幂!逻辑非++,--自增,自减$字段引用空格字符串连接符?:C条件表达式in数组中是否存在某键值in ?:awk 'BEGIN{a[1];a[2];print 1 in a?"存在":"不存在"}'存在正则匹配:awk -F "," '{if($3~/70/) printf "%s score %d\n",$2,$3}' tmp李四 score 70幂:awk -F "," '{tmp=$3^2;if(tmp>=6400) printf "%s score %d\n",$2,$3}' tmp王五 score 80空格:awk 'BEGIN{print "1" "2"}'12awk 'BEGIN{print "1","2"}'1 2数组awk的数组是一组键值对,数组的下标可以是数字和字母,值和关键字都存储在内部的一张针对key/value应用hash的表格里。awk 'BEGIN{a[z]="sky123";print a[z];}'sky123重定向awk 'BEGIN{print "1" >> "1.txt"}' | cat 1.txt1ls |awk 'FS==" "{print 1}'1流程控制语句break 当 break 语句用于 while 或 for 语句时,导致退出程序循环。continue当 continue 语句用于 while 或 for 语句时,使程序循环移动到下一个迭代。next能够导致读入下一个输入行,并返回到脚本的顶部。这可以避免对当前输入行执行其他的操作过程。exit使主输入循环退出并将控制转移到END(如果END模块存在的话)。如果没有定义END模块,或在END中应用exit语句,则终止脚本的执行。BEGIN和ENDawk ' BEGIN { action } /pattern/ { action } END { action }' 输入文件awk 'BEGIN{print "begin"}/张三/{print $0}END{print "end"}' tmpbegin1,张三,60endif:if (condition1) { action1} else if (condition2) { action2} else { action3}awk 'BEGIN{if(FNR==1) print 1;else print 2;}'2whilewhile(condition){ action3}awk 'BEGIN{a=1;while(a<5){a++;if(a>3) break;}print a;}'4forfor(变量 in 数组){action3}for(变量;condition;expression){action3}awk 'BEGIN{a[1]=100;a[2]=200;a[3]=300;for(i in a){if(i==2) continue;print a[i];}}'100300awk 'BEGIN{a[1]=100;a[2]=200;a[3]=300;for(i=1;i<=3;i++){if(i==3) exit;print a[i];}}'100200dodo{action3}while(condition)awk 'BEGIN{a=1;do{a++;}while(a<5)print a;}'5


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

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