(转)awk实例练习(二)

文章转自 http://www.cnblogs.com/zhuyp1015/archive/2012/07/14/2591842.html

先来总结一下awk内置变量:

ARGC          命令行参数个数

ARGV          命令行参数排列

ENVIRON       支持队列中系统环境变量的使用

FILENAME      awk浏览文件名

FNR           浏览文件的记录数

FS            设置输入域分隔符,等价于命令行-F选项

NF            浏览记录的域个数

NR            已读的记录数

OFS           输出域分隔符

ORS           输出例句分隔符

RS            控制记录分隔符

$ awk ‘{print NF,NR,$0} END {print FILENAME}‘ grade.txt

7 1 M.Tansley   05/99   48311   Green   8       40      44

7 2 J.Lulu      06/99   48317   green   9       24      26

7 3 P.Bunny     02/99   48      Yellow  12      35      28

7 4 J.Troll     07/99   4842    Brown-3 12      26      26

7 5 L.Tansley   05/99   4712    Brown-2 12      30      28

grade.txt

#使用 -F 参数指定分隔符

$ echo $PWD

/home/zhuyupeng

$ echo $PWD | awk -F/ ‘{print $NF"\t"NF}‘

zhuyupeng       3

#设置变量名,将27 赋值给变量BASELINE

$ awk ‘BEGIN {BASELINE="27"} $6<BASELINE {print $0}‘ grade.txt

J.Lulu  06/99   48317   green   9       24      26

J.Troll 07/99   4842    Brown-3 12      26      26

#修改数值域取值,注意‘{}’

$ awk ‘{if($1=="M.Tansley") $6=$6-1; print $1,$6,$7}‘ grade.txt

M.Tansley 39 44

J.Lulu 24 26

P.Bunny 35 28

J.Troll 26 26

L.Tansley 30 28

#修改文本域取值

$ awk ‘{if($1=="J.Troll") $1="J.L.Troll"; print $1}‘ grade.txt

M.Tansley

J.Lulu

P.Bunny

J.L.Troll

L.Tansley

#创建新的输出域,这里新的输出域为 diff

$ awk ‘BEGIN {print "Name \t Difference"} {if($6<$7) {diff=$7-$6; print $1,diff}}‘ grade.txt

Name     Difference

M.Tansley 4

J.Lulu 2

#统计某一个域的和,使用‘+=’ 下面的例子统计第六个域的和

$ awk ‘(tot+=$6); END{print "Club student total points: " tot}‘ 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       05/99   4712    Brown-2 12      30      28

Club student total points: 155

#注意区别,加‘{}’则不打印文件

$ awk ‘{(tot+=$6)}; END{print "Club student total points: " tot}‘ grade.txt

Club student total points: 155

awk 内置字符串函数

gsub(r,s)          在整个$0中用s替代r

gsub(r,s,t)        在整个t中使用s替代r

index(s,t)         在返回s中字符串t的第一个位置

length(s)          放回s长度

match(s,r)         测试s是否包含匹配r的字符串

split(s,a,fs)      在fs上将s分成序列a

sprint(fmt,exp)    返回经fmt格式化后的exp

sub(r,s)           用$0中最左边最长的子串代替s

substr(s,p)        返回字符串s中从p开始的后缀部分

substr(s,p,n)      返回字符串s中从p开始长度为n的后缀部分

#替换,目标串使用正则表达式格式‘//’

$ awk ‘gsub(/4842/,4899) {print $0}‘ grade.txt

J.Troll 07/99   4899    Brown-3 12      26      26

#查询字符串第一次出现的位置,注意使用BEGIN,否则每一行都会打印,字符串使用引号括起来

$ awk ‘BEGIN{print index("Bunny","ny")}‘ grade.txt

4

#长度

$ awk ‘$1=="J.Troll" {print length($1)" "$1}‘ grade.txt

7 J.Troll

#match 使用: 找不到返回0,找到返模式串在匹配串中的位置

#注:单独使用 加BEGIN

$ awk ‘BEGIN {print match("ANCD",/d/)}‘

0

#以下两种模式都正确

$ awk ‘$1=="J.Lulu" {print match($1,"u")}‘ grade.txt

4

$ awk ‘$1=="J.Lulu" {print match($1,/u/)}‘ grade.txt

4

#split 返回字符串数组元素个数

$ awk ‘BEGIN {print split("123#456#789",myarray,"#");print myarray[1],myarray[2],myarray[3]}‘

3

123 456 789

#sub,发现并替换模式的第一个位置

$ awk ‘$1=="J.Troll" {sub(26,29,$0)} {print $0}‘ 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      29      26

L.Tansley       05/99   4712    Brown-2 12      30      28

#substr,返回字符串指定范围内的子串

$ awk ‘$1=="L.Tansley" {print substr($1,1,5)}‘ grade.txt

L.Tan

#使用substr返回指定位置开始的后缀部分,范围只给了一个参数,注意和上一个例子相对比

$ awk ‘{print substr($1,3)}‘ grade.txt

Tansley

Lulu

Bunny

Troll

Tansley

#从shell中向awk传递字符串,通过 echo 加管道的方式

$ echo "Test" | awk ‘{print length($0)}‘

4

$ STR="mydoc.txt"

$ echo $STR | awk ‘{print substr($STR,7)}‘

txt

时间: 2024-10-10 15:36:10

(转)awk实例练习(二)的相关文章

awk用法(二)

awk用法(二) 知识点一: 条件操作符,可以进行逻辑判断,举个栗子: #awk -F ':' '$1=="daemon"' 1.txt[daemon的双引号必须要加!] 知识点二: #awk -F ':' '$1=="root" || $6~'/sbin/'' 1.txt 其中,||表示或者,上述命令表达的内容是:打印出第一段是root的,或者第六段包含sbin的行. 知识点三: #awk -F ':' '$1=="root" &&am

HTML5 本地文件操作之FileSystemAPI实例(二)

文件操作实例整理二 1.删除文件.复制文件.移动文件 //获取请求权限 window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem; window.requestFileSystem(window.TEMPORARY, 5 * 1024, initFs, errorHandler); function initFs(fs) { //删除文件 fileEntry.remove() fs.

matlab文件读写处理实例(二)——textread批量读取文件

问题:对文件夹下所有文件进行批量读取,跳过文件头部分,读取每个文件数据部分的7,8,9列,保存到变量并且输出到文件. 数据: 文件夹11m\  单个文件格式: DAV1                                                        MARKER NAME66010M001                                                   MARKER NUMBER     7    PR    TD    HR  

C语言库函数大全及应用实例十二

原文:C语言库函数大全及应用实例十二                                          [编程资料]C语言库函数大全及应用实例十二 函数名: setrgbpalette 功 能: 定义IBM8514图形卡的颜色 用 法: void far setrgbpalette(int colornum, int red, int green, int blue); 程序例: #i nclude #i nclude #i nclude #i nclude int main(v

highcharts实例教程二:结合php与mysql生成饼图

上回我们分析了用highcharts结合php和mysql生成折线图的实例,这次我们以技术cto网站搜索引擎流量为例利用highcharts生成饼图. 饼图通常用在我们需要直观地显示各个部分所占的比例的时候,比如我们需要统计各大搜索引擎来的流量比例. 第一步:创建数据库保存各搜索引擎流量的pv数 CREATE TABLE `pie` (   `id` int(10) NOT NULL AUTO_INCREMENT,   `title` varchar(30) NOT NULL,   `pv` i

基于Android2.3.5系统:JNI与HAL实例解析[二]

*************************************************************************************************************************** 作者:EasyWave                                                                                                           时间:2015.

一些有用的javascript实例分析(二)

原文:一些有用的javascript实例分析(二) 1 5 求出数组中所有数字的和 2 window.onload = function () 3 { 4 var oBtn = document.getElementsByTagName("button")[0]; 5 var oInput = document.getElementsByTagName("input")[0] 6 var oStrong = document.getElementsByTagName

Selenium2学习-022-WebUI自动化实战实例-020-JavaScript 在 Selenium 自动化中的应用实例之二(获取浏览器显示区域大小)

前几篇文章中简略概述了,如何获取.设置浏览器窗口大小,那么我们该如何获取浏览器显示区域的大小呢?此文讲对此进行简略概述,敬请各位小主参阅.若有不足之处,敬请各位大神指正,不胜感激! 获取浏览器显示区域的方法,我目前想到的只有以下两种方法: 1.通过 JavaScript  获取浏览器显示区域的大小 2.通过 WebDriver 截图,获取截图的大小,从而获得浏览器显示区域的大小 此文主要以第一种方法示例演示,第二种方法进行后续更新,敬请期待!谢谢! 1 /** 2 * Get width and

Hadoop作业性能指标及參数调优实例 (二)Hadoop作业性能调优7个建议

作者:Shu, Alison Hadoop作业性能调优的两种场景: 一.用户观察到作业性能差,主动寻求帮助. (一)eBayEagle作业性能分析器 1. Hadoop作业性能异常指标 2. Hadoop作业性能调优7个建议 (二)其他參数调优方法 二.Hadoop集群报告异常,发现个别作业导致集群事故. 一.用户观察到作业性能差,主动寻求帮助. (一)eBay Eagle作业性能分析器 对一般作业性能调优.eBay Eagle[i]的作业性能分析器已经能满足用户大部分需求. eBayEagle