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

 

转载于:https://www.cnblogs.com/lewiskyo/p/4605295.html

(转)awk实例练习(二)相关推荐

  1. Awk 实例,第 1 部分

    通用线程:Awk 实例,第 1 部分 一种名称很奇特的优秀语言介绍 Daniel Robbins 总裁兼 CEO,Gentoo Technologies, Inc. 2000 年 12 月 转载自:I ...

  2. pythonscrapy爬虫_Python 爬虫:Scrapy 实例(二)

    原标题:Python 爬虫:Scrapy 实例(二) 稍微增加点难度,做个所需项目多一点的,并将的结果以多种形式保存起来.我们就从网络天气预报开始. 首先要做的是确定网络天气数据的来源.打开百度,搜索 ...

  3. python 爬虫实例-Python 爬虫:Scrapy 实例(二)

    原标题:Python 爬虫:Scrapy 实例(二) 稍微增加点难度,做个所需项目多一点的,并将的结果以多种形式保存起来.我们就从网络天气预报开始. 首先要做的是确定网络天气数据的来源.打开百度,搜索 ...

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

    一些有用的javascript实例分析(二) 原文:一些有用的javascript实例分析(二) 1 5 求出数组中所有数字的和 2 window.onload = function () 3 { 4 ...

  5. 【Nginx那些事】nginx配置实例(二)负载均衡

    [Nginx那些事]系列 [Nginx那些事]nginx 安装及常用指令 [Nginx那些事]Nginx 配置文件说明 [Nginx那些事]nginx原理解析 [Nginx那些事]nginx配置实例( ...

  6. matlab中二维散点图,MATLAB实例:二维散点图

    MATLAB实例:二维散点图 用MATLAB实现简单的散点图的绘制,可以自行设置点的形状与颜色,可以去掉坐标轴边框. 数据来源:MATLAB高斯混合数据的生成 将二维数据保存为gauss.txt. 1 ...

  7. 梯度下降计实例计算(二维)

    梯度下降计实例计算(二维) 文章目录 内容简介 示例说明 绘制曲线 进一步讨论 参考资料 内容简介 梯度下降是在机器学习中重要的计算内容.本文就一个具体的示例,展示如何在梯度下降中. 示例说明 设损失 ...

  8. 高斯 二维 matlab,MATLAB实例:二维高斯分布图

    MATLAB实例:二维高斯分布图 问题描述:用MATLAB在一张图上同时画出二维高斯散点图与分布图. 数据来源:MATLAB高斯混合数据的生成 将二维数据保存为gauss_data.txt. 前期工作 ...

  9. HyperLynx(二十七)电源完整性之AC去耦仿真实例(二)

    电源完整性之AC去耦仿真实例(二) 1.后仿真的去耦仿真 2.去耦电容在后仿真分析中的作用 3.使用QPL文件为去耦电容分配模型 4.如何设计好电源系统 1.后仿真的去耦仿真 (1)在"开始 ...

最新文章

  1. Winform获取应用程序的当前路径的方法集合,具体如下,值得收藏
  2. 你花了多久弄明白架构设计?java多线程编程实战指南pdf
  3. python处理excel文件-python处理Excel文件
  4. ACM MM 2018论文概述:基于多粒度监督的图像语义物体协同标注
  5. 《C++ Primer》14.2.1节练习
  6. java中final关键字、权限修饰符、内部类(成员内部类、局部内部类、匿名内部类)
  7. Java CLH队列
  8. 网络测速神器:SpeedTest深度指南
  9. php-screw 安装,liunx 下安装 php_screw 扩展 以及报错处理
  10. matlab怎样求线性方程组,MATLAB线性方程组求解
  11. python opencv 绘制简单图形
  12. makefile predefined variable $^ $@
  13. 如何往ncbi上上传数据
  14. 微信小程序开发工具整理代码快捷键
  15. 2022081班李亚楠20220926
  16. 谷歌支付:In-app billing error: Null data in IAB activity result (-1002 )
  17. opensips3.0之新工具opensips-cli
  18. js怎么实现对html代码加密解密,JS实现Base64加密解密
  19. 来用 TypeScript(技术周刊 2019-04-01)
  20. 手机3D碎屏动态壁纸,随着手机晃动变幻的3D特效!科技感十足!

热门文章

  1. 使用springMVC提供的CommonsMultipartResolver文件解析器,实现文件轻松上传
  2. java case用法_Go语言 | goroutine不只有基础的用法,还有这些你不知道的操作
  3. syslog(LOG_ERR, Error: errcode=%d, message=%s, errcode, errmsg);
  4. 探究 Linux 内核 dts 设备树定义文件
  5. GDAL\OGR C#中文路径不支持的问题解决方法
  6. 推荐21个顶级的Vue UI库!
  7. 小程序报错:Error: errCode: -404011 cloud function execution error | errMsg: cloud.callFunction:fail req..
  8. 计算机应用基础操作演示,计算机应用基础上机操作题
  9. mysql.servet复制到哪_Mysql复制及代理
  10. 荣耀v30鸿蒙5g是什么版本,标配双模5G全国通手机 荣耀V30马上就要来了