最佳建站模板,淘宝客建站工具,专业网页制作编辑工具,wordpress 文章类型模板一丶awk介绍AWK是一种处理文本文件的语言#xff0c;是一个强大的文本分析工具#xff0c;可以报告生成器#xff0c;格式化文本输出1.常用语法awk [options] ‘program’ varvalue file…awk [options] -f programfile varvalue file…awk [options] BEGIN{ action;… } pa…一丶awk介绍AWK是一种处理文本文件的语言是一个强大的文本分析工具可以报告生成器格式化文本输出1.常用语法awk [options] ‘program’ varvalue file…awk [options] -f programfile varvalue file…awk [options] BEGIN{ action;… } pattern{ action;… } END{ action;… } file ...2.常用选项-F 指明输入时用到的字段分隔符-v varvalue: 自定义3.基本格式awk [options] program file…program:pattern{action statements;..}pattern和action• pattern部分决定动作语句何时触发及触发事件BEGIN,END• action statements对数据进行处理放在{}内指明print, printf(#要点(1) 逗号分隔符(2) 输出的各item可以字符串也可以是数值当前记录的字段、变量或awk的表达式(3) 如省略item相当于print $0)例~]# awk {print hello,awk}~]# awk –F: {print} /etc/passwd~]# awk –F: ‘{print “wang”}’ /etc/passwd~]# awk –F: ‘{print $1}’ /etc/passwd~]# awk –F: ‘{print $0}’ /etc/passwd~]# awk –F: ‘{print $1”\t”$3}’ /etc/passwd~]# awk -F: {printf username:%-20s salary:%-10.2f shell:%s\n,$1,$3,$7} /etc/passwd~]# tail -3 /etc/fstab |awk {print $2,$4}4.变量变量内置和自定义变量FS输入字段分隔符默认为空白字符awk -v FS: {print $1,FS,$3}’ /etc/passwdawk –F: {print $1,$3,$7}’ /etc/passwdOFS输出字段分隔符默认为空白字符awk -v FS‘:’ -v OFS‘:’ {print $1,$3,$7}’ /etc/passwdRS输入记录分隔符指定输入时的换行符原换行符仍有效awk -v RS ‘{print }’ /etc/passwdORS输出记录分隔符输出时用指定符号代替换行符awk -v RS -v ORS###‘{print }’ /etc/passwdNF字段数量awk -F ‘{print NF}’ /etc/fstab (#引用内置变量不用$)awk -F: {print $(NF-1)} /etc/passwdNR行号awk {print NR} /etc/fstab ; awk END{print NR} /etc/fstabFNR各文件分别计数,行号awk {print FNR} /etc/fstab /etc/inittabFILENAME当前文件名awk {print FILENAME}’ /etc/fstabARGC命令行参数的个数awk {print ARGC}’ /etc/fstab /etc/inittabawk ‘BEGIN {print ARGC}’ /etc/fstab /etc/inittabARGV数组保存的是命令行所给定的各参数awk ‘BEGIN {print ARGV[0]}’ /etc/fstab /etc/inittabawk ‘BEGIN {print ARGV[1]}’ /etc/fstab /etc/inittab(#要点自定义变量{区分字符大小写}(1) -v varvalue(2) 在program中直接定义)例awk -v testhello gawk {print test} /etc/fstabawk -v testhello gawk BEGIN{print test}awk BEGIN{testhello,gawk;print test}awk –F:‘{sex“male”;print $1,sex,age;age18}’ /etc/passwdcat awkscript{print script,$1,$2}awk -F: -f awkscript script“awk” /etc/passwd5.printf命令格式化并输出结果到标准输出。1)格式化输出格式化输出printf “FORMAT”, item1, item2, ...必须指定FORMAT不会自动换行需要显式给出换行控制符\nFORMAT中需要分别为后面每个item指定格式符2)格式符格式符与item一一对应%c: 显示字符的ASCII码%d, %i: 显示十进制整数%e, %E:显示科学计数法数值%f显示为浮点数%g, %G以科学计数法或浮点形式显示数值%s显示字符串%u无符号整数%%: 显示%自身3)修饰符#[.#]第一个数字控制显示的宽度第二个#表示小数点后精度%3.1f-: 左对齐(默认右对齐) %-15s显示数值的正负符号 %d例awk -F: ‘{printf %s,$1}’ /etc/passwdawk -F: ‘{printf %s\n,$1}’ /etc/passwdawk -F: {printf %-20s %10d\n,$1,$3} /etc/passwdawk -F: ‘{printf Username: %s\n,$1}’ /etc/passwdawk -F: ‘{printf “Username: %s,UID:%d\n,$1,$3}’/etc/passwdawk -F: ‘{printf Username: %15s,UID:%d\n,$1,$3}’ /etc/passwdawk -F: ‘{printf Username: %-15s,UID:%d\n,$1,$3}’ /etc/passwd例1.用awk求出磁盘利用。~]# df |grep /dev/sd |awk {printf DevName:%s Used:%s\n,$1,$5}DevName:/dev/sda2 Used:19%DevName:/dev/sda3 Used:1%DevName:/dev/sda1 Used:55%2.将/etc/passwd第一列当作姓名第三列当作工资打印报表要求显示Name:zhangsan Salary:3300 Level:High工资大于3000的Level显示High大于1000小于等于3000的显示Soso小于1000的显示LOW。~]# awk -F: {if($33000){LevelHigh}else if($31000 $33000){LevelSoso}else{LevelLow};printf Name:%-20s Salary:%-20d Level:%s\n,$1,$3,Level} /etc/passwdName:root Salary:0 Level:LowName:bin Salary:1 Level:LowName:daemon Salary:2 Level:LowName:adm Salary:3 Level:LowName:lp Salary:4 Level:Low......3.利用echo {1..10}打印如下结果~]# echo {1..10} |awk {i1;while(iNF){if($i%20){print $i,is oushu} else{print $i, is jishu};i}}1 is jishu2 is oushu3 is jishu4 is oushu5 is jishu6 is oushu7 is jishu8 is oushu9 is jishu10 is oushu4.显示文件的行~]# awk {i1;sum0;while(iNF){sum$i;i};print sum} x.txt #显示每行各自的总行55155~]# awk {i1;while(iNF){sum$i;i};print sum} x.txt #每行显示一次总和55210~]# awk {i1;while(iNF){sum$i;i}}END{print sum} x.txt #只显示总和210