awk总结 个人工作总结
1.awk 'NR%2==1' file / /显示奇数行
2.sed -n '1,$n;p' file / /显示偶数行
3.sed -n '1,$p;n' file / /显示奇数行
4.奇数行:sed '2~2d' file / /显示奇数行
5.偶数行:sed '1~2d' file/ /显示偶数行
二、修改Unix时间
linux获得 Unix时间戳方法:awk 'BEGIN{print systime()}'
date 转换法:date -d @1328075260
awk方法:awk '{$1=strftime("%Y-%m-%d-%H:%M:%S",$1); print $0}
三、特定匹配
匹配第七个字段以mp4结尾的第三个域
awk '$7~/mp4$/ {print $3}'
$ awk '$1 ~/[0-9][0-9]$/(print $1}' test-----如果第一个域以两个数字结束就打印这个记录。
$ awk '$1 != 10' test-----如果第一个域不等于10就打印该行
$ awk '$1 == 100 || $2 < 50' test-----如果第一个或等于100或者第二个域小于50,则打印该行。
$ awk '/^root/,/^mysql/' test----打印以正则表达式root开头的记录到以正则表达式mysql开头的记录范围内的所有记录。如果找到一个新的正则表达式root开头的记录,则继续打印直到下一个以正则表达式mysql开头的记录为止,或到文件末尾。
四、BEGIN&END
对某一列求和awk 'BEGIN{sum=0} {sum=$9+sum} END {print "sum " sum}' data
awk '{num+=$1} END {print unm}'
求平均数 awk 'BEGIN{sum=0} {sum=$9+sum} END {print "average " sum / FNR}' access_log
从第6个字段开始输出awk '{for(i=6; i<NF; ++i){printf "%s,",$i};printf "%sn", $NF}' access_log从第6个字段开始输出awk '{for(i=6; i= 6 && NR <=100) printf "%d: %sn", NR, $7}' access_log
五、IF条件和循环
awk '{if ($NF>3) print $0}' xxx.txt 最后一列大于3行打印
awk '{if (length($2)>3) print $0}' xxx.txt 打印第二个字段长度大于3的行
$awk '{if($2 ~ /^baidu$/) print $0}' xxx.txt 打印第二列为百度的字段 $awk '$2 ~ /^baidu$/ {print $0}' xxx.txt
awk有三种循环:while循环;for循环;special for循环。
$ awk '{ i = 1; while ( i <= NF ) { print NF,$i; i++}}' test。变量的初始值为1,若i小于可等于NF(记录中域的个数),则执行打印语句,且i增加1。直到i的值大于NF.
$ awk '{for (i = 1; i<NF; i++) print NF,$i}' test。作用同上。
breadkcontinue语句。break用于在满足条件的情况下跳出循环;continue用于在满足条件的情况下忽略后面的语句,直接返回循环的顶端。如:
{for ( x=3; x<=NF; x++)
if ($x<0){print "Bottomed out!"; break}}
{for ( x=3; x<=NF; x++)
if ($x==0){print "Get next item"; continue}}
next语句从输入文件中读取一行,然后从头开始执行awk脚本。如:
{if ($1 ~/test/){next}
else {print}
}
六、数组
awk '{a[$(NF-2)]++}END{for(i in a) print i,a[i]}' xxx.txt 统计倒数第2个字段出现的次数(字段相同+1)
七、变量
$ awk '$1 ~/test/{count = $2 + $3; print count}' test,上式的作用是,awk先扫描第一个域,一旦test匹配,就把第二个域的值加上第三个域的值,并把结果赋值给变量count,最后打印出来。
awk可以在命令行中给变量赋值,然后将这个变量传输给awk脚本。如$ awk -F: -f awkscript month=4 year=2004 test,上式的month和year都是自定义变量,分别被赋值为4和2004。在awk脚本中,这些变量使用起来就象是在脚本中建立的一样。注意,如果参数前面出现test,那么在BEGIN语句中的变量就不能被使用。
域变量也可被赋值和修改,如$ awk '{$2 = 100 + $1; print }' test,上式表示,如果第二个域不存在,awk将计算表达式100加$1的值,并将其赋值给$2,如果第二个域存在,则用表达式的值覆盖$2原来的值。再例如:$ awk '$1 == "root"{$1 ="test";print}' test,如果第一个域的值是“root”,则把它赋值为“test”,注意,字符串一定要用双引号。
内建变量的使用。变量列表在前面已列出,现在举个例子说明一下。$ awk -F: '{IGNORECASE=1; $1 == "MARY"{print NR,$1,$2,$NF}'test,把IGNORECASE设为1代表忽略大小写,打印第一个域是mary的记录数、第一个域、第二个域和最后一个域。
八、重定向和管道
$ awk 'BEGIN{ "date" | getline d; print d}' test。执行linux的date命令,并通过管道输出给getline,然后再把输出赋值给自定义变量d,并打印它。
$ awk 'BEGIN{"date" | getline d; split(d,mon); print mon[2]}' test。执行shell的date命令,并通过管道输出给getline,然后getline从管道中读取并将输入赋值给d,split函数把变量d转化成数组mon,然后打印数组mon的第二个元素。
$ awk 'BEGIN{while( "ls" | getline) print}',命令ls的输出传递给geline作为输入,循环使getline从ls的输出中读取一行,并把它打印到屏幕。这里没有输入文件,因为BEGIN块在打开输入文件前执行,所以可以忽略输入文件。
$ awk 'BEGIN{printf "What is your name?"; getline name < "/dev/tty" } $1 ~name {print "Found" name on line ", NR "."} END{print "See you," name "."} test。在屏幕上打印”What is your name?",并等待用户应答。当一行输入完毕后,getline函数从终端接收该行输入,并把它储存在自定义变量name中。如果第一个域匹配变量name的值,print函数就被执行,END块打印See you和name的值。
$ awk 'BEGIN{while (getline < "/etc/passwd" > 0) lc++; print lc}'。awk将逐行读取文件/etc/passwd的内容,在到达文件末尾前,计数器lc一直增加,当到末尾时,打印lc的值。注意,如果文件不存在,getline返回-1,如果到达文件的末尾就返回0,如果读到一行,就返回1,所以命令 while (getline < "/etc/passwd")在文件不存在的情况下将陷入无限循环,因为返回-1表示逻辑真。
可以在awk中打开一个管道,且同一时刻只能有一个管道存在。通过close()可关闭管道。如:$ awk '{print $1, $2 | "sort" }' test END {close("sort")}。awd把print语句的输出通过管道作为linux命令sort的输入,END块执行关闭管道操作。
system函数可以在awk中执行linux的命令。如:$ awk 'BEGIN{system("clear")'。
1.3.2 打印指定的匹配行数
l -m NUM, --max-count=NUM
在找到NUM个匹配的行之后,不再读这个文件。如果输入是来自一个普通文件的标准输入,并且已经输出了NUM个匹配的行,grep保证标准输入被定位于退出时的最后一次匹配的行之后,不管是否指定了要输出紧随的下文的行。grep在NUM个匹配的行之后停止,它会输出任何紧随的下文的行。
1.3.3 递归模式匹配查找
l -R/-r 递归地读每一目录下的所有文件;
l -R/-r --include=PATTERN 仅仅在搜索匹配PATTERN的文件时在目录中递归搜索;
l -R/-r --exclude=PATTERN 在目录中递归搜索,但是跳过匹配PATTERN的文件。
示例:grep忽略svn文件
1、使用管道进行双层“过滤”,其中第二次grep使用了-v选项,即逆向匹配,打印出不匹配的行,如下:
$grep -r 'function_name' * | grep -v '.svn'
2、直接使用--exclude-dir选项,即指定排除目录,注意svn前的 .如下:
$grep -r --exclude =.svn 'function_name' *
1.3.3.1 颜色标识查找结果
l --color:将找到的字符串以特殊颜色显示
未完待续
更多阅读
个人总结吕文新 个人工作总结范文
个人总结转眼间一学期又要过去了,回首过去四个学期,用四个字总结最为贴切:一塌糊涂。记得刚收到录取通知的那段日子,每天都会想着怎样规划自己的大学生活,想着自己该怎样做怎样做,两年过去了,那时的雄心已经不再那么强烈。一个人最大的敌
市级骨干教师个人工作总结 体育骨干教师个人总结
市级骨干教师个人总结 太湖县赵河中学 汪礼俊2006年12月,我有幸被评选为安庆市首届中学语文骨干教师,自2007年1月起,任期三年。光阴似箭,三年的骨干教师时日悄然过去了。回首这三年来走过的路,虽然很艰辛,但更多
2011年个人工作总结 工作总结怎么写模板
2011年个人工作总结2011年以来,我在监督中心和三大队的正确领导下,以“三个代表”重要思想为指针,认真学习胡锦涛总书记在第十六届五中全会上的重要讲话,深刻领会和把握全会的精神实质,认真做好城市数字化管理和数字城管监督工作,团结同
2013—2014学年度第二学期大队辅导员个人工作总结 大队辅导员个人总结
2013—2014学年度第二学期大队辅导员个人工作总结作为大队辅导员,我兢兢业业、一丝不苟并且创造性地开展工作。我根据学校实际、学生特点,结合时代要求,设计、组织全校少先队员开展了丰富多彩的活动,自担任辅导员以来,积累了较丰富的工
银行职员个人工作总结-不断加强学习
一、不断加强学习,提高自身素质。时代的发展已使银行业由一个最平稳的行业变成一个变化最为迅速,最富挑战性的行业,学习对于银行业人员来说,比以往任何时侯更为重要,更为迫切。现在我们金融行业的竞争日益激烈,金融产品不断创新,业务品种日