文章转自 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
 

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

  1. Awk 实例

    AWK 是一种用于处理文本的编程语言工具.AWK 在很多方面类似于 shell 编程语言,尽管 AWK 具有完全属于其本身的语法.它的设计思想来源于 SNOBOL4 .sed .Marc Rochki ...

  2. SQL Server 2008 数据库镜像部署实例之二 配置镜像,实施手动故障转移

    SQL Server 2008 数据库镜像部署实例之二 配置镜像,实施手动故障转移 上一篇文章已经为配置镜像数据库做好了准备,接下来就要进入真正的配置阶段 一.在镜像数据库服务器上设置安全性并启动数据 ...

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

    前几篇文章中简略概述了,如何获取.设置浏览器窗口大小,那么我们该如何获取浏览器显示区域的大小呢?此文讲对此进行简略概述,敬请各位小主参阅.若有不足之处,敬请各位大神指正,不胜感激! 获取浏览器显示区域 ...

  4. python学习_数据处理编程实例(二)

    在上一节python学习_数据处理编程实例(二)的基础上数据发生了变化,文件中除了学生的成绩外,新增了学生姓名和出生年月的信息,因此将要成变成:分别根据姓名输出每个学生的无重复的前三个最好成绩和出生年 ...

  5. SonarQube4.4+Jenkins进行代码检查实例之二

    SonarQube4.4+Jenkins进行代码检查实例之二 SonarQube4.4+Jenkins进行代码检查实例之二

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

    原文:一些有用的javascript实例分析(二) 5 求出数组中所有数字的和 window.onload = function () { var oBtn = document.getElement ...

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

    原文:C语言库函数大全及应用实例十二                                          [编程资料]C语言库函数大全及应用实例十二 函数名: setrgbpalette ...

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

    文件操作实例整理二 1.删除文件.复制文件.移动文件 //获取请求权限 window.requestFileSystem = window.requestFileSystem || window.we ...

  9. 敏捷软件开发_实例1<二>

    敏捷软件开发_实例1 这本书的实例非常好,给了我非常多的启发.主要讲了两个实例,咖啡机和薪水支付实例,咖啡机实例比较简单并没有用什么设计模式,薪水支付实例用了很多设计模式,包括后面的打包等. 咖啡机实 ...

随机推荐

  1. [总结] JDBC数据库操作

    1.加载驱动--告诉驱动管理将使用哪一个数据库的驱动包. class.forName("com.mysql.jdbc.Driver"); 2.操作JDBC ADI完成数据库动作 D ...

  2. 前端js面试中的常见的算法问题

    虽说我们很多时候前端很少有机会接触到算法.大多都交互性的操作,然而从各大公司面试来看,算法依旧是考察的一方面.实际上学习数据结构与算法对于工程师去理解和分析问题都是有帮助的.如果将来当我们面对较为复杂 ...

  3. eclipse tomcat 集成

    1. 下载 Tomcat        作者选择的是 Tomcat6,下载地址:http://tomcat.apache.org/download-60.cgi,选择绿色版的 zip 进行下载(目前最 ...

  4. MongoDB win安装后无法远程连接访问

    mongoDB安装后无法远程连接访问,原因是端口没有开放允许连接的权限 开启允许连接的权限: 管理工具-高级win防火墙

  5. ElasticSearch

    ElaticSearch简介: ES是一个搜索引擎,基于当前最先进,最高效的全功能开源搜索引擎框架lucene ES还有许多功能: 分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索 近实时 ...

  6. No compiler is provided in this environment. Perhaps you are running on a JRE ra

    No compiler is provided in this environment. Perhaps you are running on a JRE ra,有需要的朋友可以参考下. 控制台输出的 ...

  7. Java中的回调函数

    本例拿apache commons dbutils举例 回调函数: 回调是指在执行时,具体的封装处理工用由第三方的类来实现. 回调一般由两部分组成 1:调用类 - QueryRunner.实例类 2: ...

  8. 【转】PowerShell入门(十一):编写脚本模块

    转至:http://www.cnblogs.com/ceachy/archive/2013/03/08/PowerShell_Script_Module.html 现在通过编写模块就可以在PowerS ...

  9. spring 笔记1: mvn 中Controller方法的参数不能是嵌套类(内部类)。

    最近做spring开发,个人认为,Controller和客户端js通讯时传递的参数类 只使用某几个方法,为了减少对其他功能的影响,想把参数类定义为Controller类的 嵌套类(内部类).但是实践发 ...

  10. HDU 4292:Food(最大流)

    http://acm.hdu.edu.cn/showproblem.php?pid=4292 题意:和奶牛一题差不多,只不过每种食物可以有多种. 思路:因为食物多种,所以源点和汇点的容量要改下.还有D ...