用awk,写出总分机构所得税分配小于340的学生情况

Awk练习笔记
P.Bunny 02/99
J.Troll 07/99
Brown-3 12
Brown-2 12
***【条件操作】***
1、模糊匹配
#awk '{if($4~/Brown/) print $0}' file
J.Troll 07/99
Brown-3 12
Brown-2 12
2、精确匹配
#awk '$4=="Brown-3" {print $0}' file
J.Troll 07/99
Brown-3 12
awk 不匹配
#awk '{if($4!~/Brown/) print $0}' file
P.Bunny 02/99
#awk '$4!~/Brown/' file
P.Bunny 02/99
(默认情况下,awk将会打印所有匹配记录,因此这里不必加入动作部分!)
#awk '{if($6&$7) print $0"\t" ""$1" Try better at next comp"}' file
M.Tansley Try better at next comp
L.Lulu Try better at next comp
awk 小于等于
#awk '{if($6 &= $7) print $0}' file
J.Troll 07/99
Brown-3 12
awk 匹配大小写
#awk '/[Gg]reen/' file
awk 任意字符(第四个字符是a的行)
#awk '$4 ~/^...a/' file
Brown-2 12
#awk '$0~/(Yellow|Brown)/' file
P.Bunny 02/99
J.Troll 07/99
Brown-3 12
Brown-2 12
#awk '/^48/' input-file
awk 逻辑关系 && || !
#awk '{if($1=="L.Lulu" && $4=="green") print $0}' file
#awk '{if($1=="L.Lulu" || $4~/Brown/) print $0}' file
J.Troll 07/99
Brown-3 12
Brown-2 12
#awk '{if($7!="26") print $0}' file
P.Bunny 02/99
Brown-2 12
***【awk内置变量】
ARGC(命令行参数个数)
AWK脚本参数个数
ARGV(命令行参数排列)
ENVIRON(支持系统环境变量设置)
FILENAME(awk浏览的文件名)告知系统目前正在浏览的实际文件
FNR(浏览文件的记录数)
FS(域分割符)
NF(浏览记录的域个数)
支持记录域个数
NR(已读的记录数)
OFS(输出域分割符) 默认为空格,如果想设置为#,写入OFS=“#”
ORS(输出记录分割符)
默认为新行 \n
RS(控制记录分割符) 默认为新行 \n
1、NF。NR。FILENAME
#awk '{print NF,NR,$0} END{print FILENAME}' file
7 1 M.Tansley
(域个数,已读记录数)
7 2 L.Lulu
7 3 P.Bunny 02/99
7 4 J.Troll 07/99
Brown-3 12
7 5 L.Tansley
Brown-2 12
#awk '{if(NR&0 && $4~/Brown/) print $0}' file
J.Troll 07/99
Brown-3 12
Brown-2 12
#echo "/usr/local/bin/gls-makebridge" |awk -F/ '{print $NF}'
(显示文件名,显示最后一级名字)
gls-makebridge
***【awk操作符】***
= += *= /= %= ^= 赋值操作符
? 条件表达操作符
|| && ! 或与非
~ !~ 匹配与不匹配
& &= == != && 关系操作符
+ - * / % ^ 算数操作符
+ + -- 前缀和后缀
1、设置变量名
#awk '{name=$1;belts=$4;print name" is belt "belts}' file
M.Tansley is belt Green
L.Lulu is belt green
P.Bunny is belt Yellow
J.Troll is belt Brown-3
L.Tansley is belt Brown-2
#awk '{name=$1;belts=$4;if($4~/Yellow/)print name" is belt "belts}' file
P.Bunny is belt Yellow
2、域值比较
a、在BEGIN中给变量赋值
(很有益的)
b、在关系操作中使用实际数值
(使用关系操作必须用圆括号括起来)
#awk 'BEGIN{kevin="27"} {if($6&kevin) print $0}' file
J.Troll 07/99
Brown-3 12
#awk '{if($6&27) print $0}' file
J.Troll 07/99
Brown-3 12
3、修改数值域取值
找出名字为M.Tansley的人,将他的成绩减1.
#awk '{if($1=="M.Tansley")$6=$6-1;print $1,$6,$7}' file
M.Tansley 39 44 (之前为40,现在为39)
L.Lulu 24 26
P.Bunny 35 28
J.Troll 26 26
L.Tansley 30 28
4、修改文本域
将J.Troll修改为J.L.Troll
(字符串要是用双秒号“”)
#awk '{if($1=="J.Troll")$1="J.L.Troll";print $1}' file
(已经改过了)
5、只显示修改过的记录 (注意是花括号,合并命令)
#awk '{if($1=="J.Troll"){$1="J.L.Troll";print $1}}' file
6、创建新的输出域
创建域8保存目前级别分与域最高级别分的减法值
#awk 'BEGIN{print "Name\tDifferents"}{if($6&$7){diff=$7-$6;print $1"\t"diff}}' file
Differents
7、增加列值
(统计总分)
#awk '(tot+=$6);END{print "Club student total points: "tot}' file
如果只想看结果而不打印其它的,那就这样
#awk '{(tot+=$6)};END{print "Club student total points: "tot}' file
8、文件长度增加
(查看文件名及对应的文件大小,最后统计总大小)
#ls -l |awk '/^[^d]/ {print $9"\t"$5}{tot+=$5} END{print "total KB: "tot}'
RH255-10_系统监控和日志.pdf
RH255-11_集中和安全存储.pdf
RH255-12_通过SSL封装的WEB服务.pdf
RH255-13_WEB服务器其他配置.pdf 221958
RH255-14_基本SMTP配置.pdf
RH255-15_仅缓存DNS服务器.pdf
RH255-16_通过NFS共享文件.pdf
RH255-17_通过CIFS共享文件.pdf 215369
RH255-18_通过FTP共享文件.pdf
RH255-19_对引导过程进行故障排除.pdf
RH255-1_从教室环境入门.pdf 242201
RH255-2_增强用户安全.pdf
RH255-3_BASH脚本编程和工具.pdf 340625
RH255-4_通过GNUPG保护文件安全.pdf
RH255-5_包管理.pdf 272382
RH255-6_网络监控.pdf
RH255-7_高级网络配置.pdf
RH255-8_保护网络通信.pdf
RH255-9_NTP服务器配置.pdf
total KB: 4707682
***【内置的字符串函数】***
在整个$0中用s替代r
gsub(r,s,t) 在整个t中用s替代r
index(s,t)
返回s中字符串t的第一位置
match(s,r)
测试s是否包含匹配r的字符串
split(s,a,fs)
在fs上将s分成序列a
sprint(fmt,exp) 返回经fmt格式化后的exp
用$0中最左边最长的子字符串代替s
substr(s,p) 返回字符串s中从p开始的后缀部分
substr(s,p,n)
返回字符串s中从p开始长度为n的后缀部分
gsub函数有点类似于sed查找和替换。第一个函数作用于记录$0,第二个函数gsub函数允许指定目标。未指定目标则默认为
index(s,t)函数返回目标字符串s中查询字符串t的首位置.length函数返回字符串s字符长度.
split使用域分割符fs将字符串s划分为指定序列a。
(目标模式/,替换为/)
#awk 'gsub(){print $0}' file
J.Troll 07/99
Brown-3 12
2、index (必须用双引号将字符串括起来)
#awk 'BEGIN{print index("Bunny","ny")}'
3、length (返回所需字符串的长度)
#awk '$1=="J.Troll" {print length($1)"\t"$1}' file
#awk 'BEGIN{print length("A FEW GOOD MEN")}' (为什么不加BEGIN会显示5行的14?每读一行数据就要输出一次长度,所以有5行。这里把这个放到BEGIN那里预处理,预处理不需要后面加文件的。)
4、match (测试目标字符串中是否包含查找字符的一部分)
#awk 'BEGIN{print match("ANCD","d")}'
(未找到所以显示0)
#awk 'BEGIN{print match("ANCD","D")}'
(找到,在第四位上)
#awk '$1=="L.Lulu" {print match($1,"u")}' file
5、split (返回字符串数组元素个数)
#awk 'BEGIN{print split("123#456#789",myarray,"#")}'
(字符串必须用双引号括起来)
6、substr (按照起始位置及长度返回字符串的一部分)
#awk '$1=="L.Tansley"{print substr($1,2,6)}' file
(将$1的第二到第五个字符截取出来)
利用这个截取可以小试一下截取ip:
a、#ifconfig br0
Link encap:Ethernet
HWaddr 00:1E:37:D2:9F:FD
inet addr:192.168.0.24
Bcast:192.168.0.255
Mask:255.255.255.0
inet6 addr: fe80::21e:37ff:fed2:9ffd/64 Scope:Link
UP BROADCAST RUNNING MULTICAST
RX packets:402571 errors:0 dropped:0 overruns:0 frame:0
TX packets:202353 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes: (368.7 MiB)
TX bytes:.7 MiB)
b、#ifconfig br0 |awk '{print substr($2,6,20)}' | grep "\." (6-20位是ip地址)
192.168.0.24
#awk '{print substr($1,3)}' file
(对全文第一区域的数据从第三位开始显示)
#awk 'BEGIN{str="A FEW GOOD MEN"} END{print substr(str,7)}' file
(将字符串str从第七位开始截取,结果是”GOOD MEN“)
8、从shell中想awk传入字符串
#echo stand-by haha | awk '{print length($0)}'
#echo stand-by haha | awk '{print length($1)}'
#echo stand-by haha | awk '{print length($2)}'
设置一文件名为变量,管道输出到awk.
#str=mydoc.txt
#echo $str |awk '{print substr($str,1,5)}'
(返回不带扩展名的文件名)
#echo $str |awk '{print substr($str,7,20)}' (只返回扩展名,末尾字符任意)
***【字符串屏蔽序列】***
\t tab键 \f 走纸换页
\ddd 八进制值
\c 任意其它字符
#awk 'BEGIN{print "\nMay\tDay\n\nMay\t\104\141\171"}'
May Day (\104为D的八进制ASCII码,\141为a,\171为y)
***【awk输出函数printf】***
Width 域的步长,用0表示0步长
.prec 最大字符串长度,或小数点右边的位数
%c ASCII码字符 %d 整数
%e 浮点数,科学计数法
%f 浮点数,如1.23 %g awk决定使用哪种浮点数
%o 八进制数
%x 十六进制数
1、字符转换
#echo 65|awk '{printf "%c\n",$0}' 或者 #awk '{printf "%c\n",65}'
#awk 'BEGIN{printf "%f\n",999}' (浮点数转换)
999.000000
2、格式化输出
要求名字左对齐,15个字符长度,后跟序列号。
#awk '{printf "%-20s %3s %6s\n",$1,$3,$5}' file
($1-$3间距20个字符)
修饰一下:
#awk 'BEGIN{print "Name\tS\tNumber"}{printf "%-10s %3s %6s\n",$1,$3,$5}' file
(多一行注释)
3、向一行awk命令传值
命令: awk 命令变量=输入文件值
#awk '{if($5&age) print $0}' age=10 file
#df -k |awk '($4~/^[0-9]/ && $4!~/%/) {if($4&lowfree) print $1"\t"$4}' lowfree=65000
(查看可用空间小于65M的分区)
#who |awk '{print $1" is logged on"}'
(查看当前谁登录主机)
root is logged on
#who |awk '{if($1==user) print $1" you are connected to "$2}' user=$LOGNAME
root you are connected to tty1
(效果等价于上面,这里是传递参数)
4、awk脚本文件
#vim student_tot.awk
! /bin/gawk -f
#prints total and average of club student points
#print a hearder first
print "Student
print "Name
Point Available"
print "================================================================"
#let's add the scores of points gained
#finished processing now let's print the total and average point
END{print "Club student total points: " tot
print "Average Club Student points: " tot/NR}
5、在awk中使用FS变量
#vim passwd.awk
!/usr/bin/awk -f
{print $1,"\t",$5}
6、向awk脚本传值
awk script_file var=value input_file
=========================
#vim fieldcheck.awk
!/usr/bin/awk -f
print("line " NR "does not have "MAX" fields")}
#sh fieldcheck.awk MAX=7 FS=":" /etc/passwd
=========================
#vim name.awk
!/usr/bin/awk -f
{if($5 & age)
#sh name.awk age=10 file
=========================
# vim duawk.awk
!/usr/bin/awk -f
OFS="\t" ;
print "name" "\t\t","bytes","blocks\n"
print "=============================="}
{print $2,"\t\t",$1*512,$1}
# du |duawk.awk
=========================
9、awk数组
# vim arraytest.awk
#!/usr/bin/awk -f
record="123#456#789";
split(record,myarray,"#")}
END{for(i in myarray) {print myarray[i]}}
# sh arraytest.awk /dev/null
=========================
本文出自 “梦想年华 @楚国小生” 博客,请务必保留此出处http://linuxkeep./671
> 本站内容系网友提交或本网编辑转载,其目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请及时与本网联系,我们将在第一时间删除内容!
SED与AWK学习笔记 1. 基本概念 Sed是一个&非交互式&的面向字符流的编辑器. 这个面向字符流就像是我去餐厅点了一道菜让厨师做,菜都是字符,厨师做好后直接送到我面前.所以我只要下达命令就好. Sed的优点是可以在一个地方指定所有的编辑指令,然后通过文件传递一次来执行他们.但是它在每次多于一行的处理能力方面有限制. Awk的典型应用 ...
awk中的数组 awk中的数组跟php中的很像,使用前都不需要声明,都可以用字符串做下标. 我们创建一个reg.dat文件来记录用户选修的课程: Mary O.S. Arch. Discrete Steve D.S. Algorithm Arch. Wang Discrete Graphics O.S. Lisa Graphics A.I. Lily Dis ...
Awk学习笔记 整理:Jims of 肥肥世家 && Copyright (C) 2004 本文遵从GPL协议,欢迎转载.修改.散布. 第一次发布时间:日 Table of Contents 1. awk简介 2. awk命令格式和选项 2.1. awk的语法有两种形式 2.2. 命令选项3. 模 ...
awk的条件语句与高级语言相同,其实就下面的四种 if else if else ?: 先创建一个测试文件,student-marks: Jones
77 Gondrol
1)现在要找出缺少某一科或某 ...
在awk程序中使用shell 在awk学习笔记(6)中我们已经简单的了解了管道符的用途,本文会用更多的例子来详述awk中使用管道符来接收shell传递过来的数据的处理. 例子一:取得系统当前登录人数 编写count.awk文件: BEGIN { while ( &who& | getline) n++ print n } 执行: awk
1.4 Sed编辑器sed是一个非交互式的流编辑器.它解释了一段脚本并执行脚本中的操作.sed是面向流的,因为跟很多的unix程序一样,它的程序输入是通过输入流的,并且它是直接输出到标准的输出的.例如sort是面向流的,但vi就不是.sed的输入经常是来自于一个文件或一个管道,但是它也可以从键盘中重定向过去.输出会默认的会输出的屏幕上,但是可以被捕捉到一个文 ...
shell脚本学习笔记九--awk #cat grade.txt M.Tansley 05/99 48311 Green 8 40 44 J.Lulu 06/99 48317 green 9 24 26 P.Bunny 02/99 48 Yellow 12 35 28 J.Troll 07/99 4842 Brown-3 12 26 26 L.Tansley ...
awk的内置函数不多,除去数学和字符串的都归到其他类了.如下表: 函数 说明 close( Expression ) 用同一个带字符串值的 Expression 参数来关闭由 print 或 printf 语句打开的或调用 getline 函数打开的文件或管道.如果文件或管道成功关闭,则返回 0:其它情况下返回非零值.如果打算写一个文件,并稍后在同一个程序中 ...114网址导航最新公告:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
用户名称:
登陆密码:
附加验证:
Cookie:不保存保存一天
保存一月保存一年
最新图片文章
站内文章搜索:
文章标题文章内容文章作者编辑姓名&所有栏目&&
?&[<font color=#]?&[<font color=#]?&[<font color=#]?&[<font color=#]?&[<font color=#]
?&[<font color=#7]?&[<font color=#5]?&[<font color=#8]?&[<font color=#3]?&[<font color=#2]
:&&&&&&&&
&[谢 君|<font color=#-26|<font color=#4]&[王念春, 张舒予|<font color=#-15|<font color=#]&[周 灵1 * , 张舒予 1 , 王莉莉 2|<font color=#-24|<font color=#7]&[张 琳1,张舒予2,朱永海3|<font color=#-06|<font color=#7]&[赵慧臣1王 h1张舒予2|<font color=#-06|<font color=#]
:&&&&&&&&
&[白倩|<font color=#-20|<font color=#]&[|<font color=#-06|<font color=#]&[白倩|<font color=#-22|<font color=#]&[王颖|<font color=#-08|<font color=#]&[|<font color=#-18|<font color=#]
本站由南京师范大学视觉文化研究所主办 2005年获中国教育技术协会年会教育主题网站一等奖&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!前言这两天自己挽起袖子处理日志,终于把AWK给入门了。其实AWK的基本使用,学起来也就半天的时间,之前总是靠同事代劳,惰性呀。此文仅为菜鸟入门,运维们请勿围观。下面是被处理的日志的示例,不那么标准,但不标准的日志正是标准的情况。[ 10:00:55.600] - [192.168.0.73/192.168.0.75:1080 com.vip.xxx.MyService_2.0 0 346 90ms 110ms]基本语句最基本的语句,以空格做分割,提取所需的列:awk &#39;{print $0,$1,$2,$(NF-1),$NF,$NF-$(NF-1)}’ access.log1. 输入AWK是针对文件或管道中每行输入的处理语言。所以也可以从管道输入:grep “xxx” access.log | awk &#39;{print $1}’但下面这样写就会成为一个Linux老梗的主角,awk不需要不需要cat的。cat access.log | awk &#39;{print $1}&#39;2.语句定义可以快速的用单引号’ ’,把所有语句写成一行。也可以用-f 指定文件,文件里可以任意换行,增加可读性和重用性。所有执行语句用{}括起来,{}的外面是一些高级的东西比如过滤条件,见后。3. 列引用$0代表整行所有数据,$1代表第一列(终于不是程序员数数从0开始了)。NF是个代表总列数的系统变量,所以$NF代表最后一列,还支持$(NF-1)来表示倒数第二列。还支持列之间的运算,如$NF-$(NF-1)是最后两列的值相减。只写一个print 是 print $0的简写,打印整行所有数据。4. 输入的列分隔符默认以空格做分割符,也可以重新指定,下例指定了&#39;:&#39;awk -F &#39;:&#39; &#39;{print $1,$2}’ access.log也可以正则表达式定义多个分割符,下例指定了 &#39;-&#39; 和 &#39;:&#39;awk -F &#39;[-:]&#39; &#39;{print $1,$2}’ access.log5. 输出的列间隔print $1,$2 中间的&#39;,&#39;逗号,代表打印时第1与第2列之间使用默认分隔符号也就是空格,也可以用” ”来定义其他任意的字符:awk &#39;{print $1 &\t& $2 & - & $3$4xxxxx$5}’ access.log上例,在第1第2列之间用 tab 分隔,第2第3列之间用& - &分隔,也可以什么都不写代表中间没分隔,比如第3第4列之间,或者乱写一些字符没用& &括起来,也等于没写,比如第4第5列之间。数字类型,字符串类型虽然上例最后两列的值是字符串类型的,带着ms字样,看起来不能做算术运算。但其实两个列相减时,AWK就会神奇地把它们转换为纯数字。同样,做累计的时候,sum=sum+$NF,也能自动转换为数字。如果想对某个字符列比较是否大于阀值,先把它转回数字就行了,上一篇文章里的sed &s|ms]||g& access.log | awk &#39; $NF&100 {print}&#39;其实可以简写成下面的样子,性能还比使用sed略快:awk &#39; $NF*1&100 {print}’ access.log或awk &#39; int($NF)&100 {print}’ access.logBEGIN与END语句BEGIN与END后的语句定义在处理全部文本内容之前与之后的语句。1.计算累计值和平均值awk &#39;{sum+=$NF} END {print sum, sum/NR}&#39;上例对每行输入内容进行最后一列的值的累计,而END后的语句,打印累计结果 和平均值,NR是系统变量代表总行数。2.打印表头还可以定义BEGIN语句打印表头,定义变量什么的。awk &#39;BEGIN{print &Date\t\tTime\t\tCost”} {print $1 &\t&$2 &\t& $NF}’ access.log上例表头用两个制表符分隔,内容则用一个制表符分隔,有良好的对齐效果。 过滤行1. 简单字符匹配先用grep过滤也是可以的,也可以用awk简单在执行语句之外的/ /之间定义正则表达式awk &#39;/192.168.0.4[1-5]/ {print $1}’ access.log等价于grep &192.168.0.4[1-5]” access.log| awk ‘{print $1}2. 针对某一列的字符匹配针对第4列的地址段匹配,~ 是字符匹配,!~则是不匹配的意思。awk &#39;$4 ~ /192.168.0.4[1-5]/ {print}&#39;3. 针对数值的过滤支持==, !=, &, &, &=, &=awk &#39;$(NF-1)*1==100 {print}&#39;awk &#39;$NF-$(NF-1)&100 {print}&#39;见前,对于非纯数字的字段,可以用算术运算让它转回数字。4. 多条件同时存在awk &#39;($12 &150 || $(13)&250) {print}&#39;5. 使用if语句如果逻辑更复杂,可以考虑使用if,else等语句awk &#39;{ if ($(NF-1)*1&100) print}&#39;其他1.外部传入参数比如从外面传入超时的阀值,注意threshold在命令行中的位置。awk &#39;{if($(NF)*1&threshold) print}&#39; threshold=20 access.log2.常用函数最有用是gsub和sub,match,index等。其中gsub将一个字符串替换为目标字符串,可选定整行替换或只替换某一列。awk &#39;{gsub(&ms]&,&&,$NF); if( $NF&100 ) print}&#39; access.log一些例子1.截取日期段内段数据方式有很多,都是随着日志格式不同自由发挥。比如下段截取17:30:30 秒到 17.31:00的数据,先抽取出时分秒三列,再拼成一个数字进行比较awk -F &[ :.]& &#39;$2$3$4&=173030 && $2$3$4&173100 {print}&#39;也可以匹配某个整点时间, 下例取11点的日志:awk &#39;/[ 11:/ {print $1}’ access.log取11点01分到05分的数据:awk &#39;/[ 11:0[1-5]:/ {print $1}’ access.log2. 找出超时的数据集中发生的时间第一段找出超时记录,第二段过滤掉时间戳里的微秒,然后按秒来合并,并统计该秒超时的次数。awk &#39;$(NF)*1&100 {print}’ access.log | awk -F&.& &#39;{print $1}&#39; | sort | uniq -c原文链接:/articles/awk_accesslog.html网摘文章,如有不妥,请联系我们!面授班第17期和网络班15期招生已经开始接收报名,有意者请多关注!有意者请从速联系QQ:、、,讨论请加QQ群:咨询电话:010-马哥linux运维(gh_904f) 
 文章为作者独立观点,不代表大不六文章网立场
gh_904f马哥linux致力于linux运维培训,连续多年排名第一,订阅者可免费获得学习机会和相关Linux独家实战资料!热门文章最新文章gh_904f马哥linux致力于linux运维培训,连续多年排名第一,订阅者可免费获得学习机会和相关Linux独家实战资料!&&&&违法和不良信息举报电话:183-
举报邮箱:
Copyright(C)2016 大不六文章网
京公网安备78}

我要回帖

更多关于 国考总分是多少 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信