文章转自 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. mvc中测试网络

    .//控制器层面 public string IsAnyNetworkAvailable() { try { foreach (NetworkInterface ni in NetworkInterf ...

  2. springMVC--@requestBody

    springMVC支持将前端传来的json字符串直接自动解析,注意点如下: 后台 1,在需要自动解析的参数前加上“@requestBody”,例如“public boolean updateOnePd ...

  3. python之编写登陆接口(第一天)

    作业:编写登陆接口 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定 针对此实例写了有二种类型的脚本,略有不同,具体如下: 帐号文件account.txt内容如下: sam 123 david ...

  4. Microsoft Azure 云存储服务概念

    本文包括了以下几点内容: 什么是Azure云存储服务? 云存储服务分类 云存储服务的优势 什么是Azure云存储服务? Azure 云存储服务可以说是Azure 上最重要的SAAS服务了. 在Azur ...

  5. Highcharts使用教程(1):制作简单图表

    今天我们要使用JavaScript图表Highcharts制作简单的柱形图,我们已经安装好Highcharts,让我们开始制作图表吧. 步骤一 在网页中添加一个div.设置id,设置图表长.高.代码如 ...

  6. LeetCode:461. Hamming Distance

    package BitManipulation; //Question 461. Hamming Distance /* The Hamming distance between two intege ...

  7. border-radius的兼容问题

    border-radius可以便捷的制作圆角效果,不需要通过增加圆角图片来达到效果,便于维护. 语法:border-radius:none | 1-4 length | % / 1-4 length| ...

  8. 采用重写tostring方法使ComboBox显示对象属性

    当ComboBox中添加的是对象集合的时候,如果运行就会发现显示是的命令空间.类名,而如果我们想显示对象属性名的时候,我们就可以在对象类中重写object基类中的tostring方法.

  9. java开发中中文乱码总结

    1.jsp页面内容显示乱码 这种乱码原因很简单,一般的工具或解码程序对中文字符解析时采用默认的解码方式: <%@ page contentType="text/html; charse ...

  10. jQuery的deferred对象学习

    #copy { background-color: lightgreen; padding: 15px; margin: 10px } 一.deferred对象简介 deferred对象是jquery ...