linux下字符串处理工具二:awk(1)
awk工作原理
原理图
第一步:awk对文件或管道的内容一次只处理一次,将获取到的这一行赋给内部变量$0。
第二步:这一行的内容按awk内部变量FS定义的分隔符,缺省为空格(包括tab制表符)分解成字段,每一段存储在从$1开始的变量中。
第三步:awk中print命令打印字段;{print $1,$3} 只取有用的第一段和第三段;在打印时$1和$3之间由空格间隔。“,”逗号是一个映射到内部的输出字段分隔符(OFS),OFS变量缺省为空格,逗号在输出时被空格替换。接下来,awk处理下一行数据,直到所有的行处理完。
例子:
截取部分/etc/passwd的内容在5.txt 中作为例子
➜ awkstudy cat 5.txt
_spotlight:*:89:89:Spotlight:/var/empty:/usr/bin/false
_tokend:*:91:91:Token Daemon:/var/empty:/usr/bin/false
_securityagent:*:92:92:SecurityAgent:/var/db/securityagent:/usr/bin/false
_calendar:*:93:93:Calendar:/var/empty:/usr/bin/false
_teamsserver:*:94:94:TeamsServer:/var/teamsserver:/usr/bin/false
打印所有的5.txt的内容
awk '{print $0}' 5.txt 或者
awk '{print}' 5.txt
代码块 {print} 单独出现的时候,会打印一整行的东西={print $0}
awk '{print ""}' 5.txt
会打印出与5.txt中行数相等的空行
awk '{print "hello"}' 5.txt
会打印出与5.txt行数相等的hello
基本示例
入门例子
awk -F":" '{print $1,$4}' 5.txt
_spotlight 89
_tokend 91
_securityagent 92
_calendar 93
_teamsserver 94
awk -F":" '{print $1 $4}' 5.txt
_spotlight89
_tokend91
_securityagent92
_calendar93
_teamsserver94
awk -F":" '{ print "username: " $1 "\t\tuid:" $3 }' 5.txt
username: _spotlight uid:89
username: _tokend uid:91
username: _securityagent uid:92
username: _calendar uid:93
username: _teamsserver uid:94
awk内建变量
用法示例
设置字段分隔符号(FS使用方法)
awk 'BEGIN{FS=":"}{print NR,$1,$NF}' 5.txt
或者:
awk -F":" '{print NR,$1,$NF}' 5.txt
记录条数(NR,FNR使用方法)
awk -F":" '{print NR,$1,$NF}' /etc/passwd
设置输出字段分隔符(OFS使用方法)
awk 'BEGIN{FS=":";OFS="^^"}/^root/{print FNR,$1,$NF}' /etc/passwd
12^^root^^/bin/sh
设置输出行记录分隔符(ORS使用方法)
awk 'BEGIN{FS=":";ORS="^^"}{print FNR,$1,$NF}' 5.txt
输入参数获取(ARGC ,ARGV使用)
awk 'BEGIN{FS=":";print "ARGC="ARGC;for(k in ARGV) {print k"="ARGV[k]; }}' 5.txtARGC=2
0=awk
1=5.txt
获得linux环境变量(ENVIRON使用)
awk 'BEGIN{print ENVIRON["PATH"];}'
/Users/enyilr/.jenv/bin:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin:/Users/enyilr/javatools/apache-maven-3.3.3/bin:/Users/enyilr/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
ENVIRON是子典型数组,可以通过对应键值获得它的值。
RSTART RLENGTH使用
awk 'BEGIN{start=match("this is a test",/[a-z]+$/); print start, RSTART, RLENGTH }'
11 11 4
awk 'BEGIN{start=match("this is a test",/^[a-z]+$/); print start, RSTART, RLENGTH }'
0 0 -1
RSTART 被匹配正则表达式首的位置,RLENGTH匹配字符长度,没有找到为-1.
参考:https://www.ibm.com/developerworks/cn/linux/shell/awk/awk-1/
相关文章:

后台接口向数据库录入汉字时乱码以及自动过滤文字经验总结
本人第一次写博客,而且是一个菜鸟,如果有什么不完善的地方请前辈们多多指教。 2017-06-01 21:56:05 因为公司功能的需求,需要写一个溯源信息的接口,下面的代码是前台的一个用户评论的界面。所谓溯源就是追溯源头,有点类…

PHP新手上路(六)
5.5 计数器 让我们在首页上加上一个计数器。这个例子已经被讲过多次了,但是还是有利于演示怎样读写文件以及创建自己的函数。counter.inc包含以下代码: <? /* || 一个简单的计数器 */ function get_hitcount($counter_file) { /…
如何教计算机认识手写数字(下)
本文详细介绍了如何利用C#语言编写KDTree结构加速KNN算法来处理手写字符的识别问题。本文由安晟提供。

linux下字符串处理工具二:awk( 二),awk脚本
awk脚本 awk脚本是一个可执行的文件,常习惯以.awk命名。 结构: $test.awk #!/bin/awk -f #脚本系统中awk的位置BEGIN{} #脚本主体之前,执行些什么。该行内的语句,可以只执行一次{} #脚本主体,此中的语句&am…

JavaScript正则表达式test的用法
<script LANGUAGE"javascript">function checkStr( s)...{var regu /abc/gi;var re new RegExp(regu);return re.test(s);}checkMobile(vabceeabc);</script>用途:检查输入的字符串是否含有abc,如果有返回true,否则返回false方法test(string…
如何利用C#开发“通讯录”小程序
本文介绍了数理系15级魏道鑫同学汇报的成果,利用C#开发的通讯录小程序。

Ubuntu 16.04 install NVDIA display driver
2019独角兽企业重金招聘Python工程师标准>>> 1. search and download the driver http://www.nvidia.cn/Download/ 2. vim /etc/modprobe.d/blacklist.conf append this lines to the file blacklist vga16fb blacklist nouveau blacklist rivafb blacklist rivatv …

C#Hello World
自己是做java开发的,但是有时候有些问题用java解决起来很不方便,比如调用windows系统的东西,所以要快速自学一下C#,快速解决一个问题。 下面是一个简单的控制台程序。 using System; //using 关键字的作用是导入命名空间 using Sy…
如何利用离散Hopfield神经网络进行高校科研能力评价(1)
如何利用离散Hopfield神经网络进行高校科研能力评价(1)代码部分

OpenDNS 不再向用户展示广告
OpenDNS是流行的免费域名解析服务提供商,它的收入一度主要来自广告,当用户输入的网址无法解析它会将用户重定向到广告页。在OpenDNS诞生前,ISP提供的域名解析是用户唯一的选择。但ISP的DNS服务称不上有多好,不怎么可靠。但如今&am…

winform配置文件的简单使用(转载)
1. 首先创建一个winform解决方案2. 与添加类文件相同的方法添加配置文件,比如:右击解决方案下的项目名称—>添加—>新建项—>选择 “应用程序配置文件”,.net默认文件名为app.config,点击确定 打开…

C#版及nodejs版的com端口监听程序
感受: 写监听程序的感受:原来有些事情并不是想象的那么难,难和简单就只在一个点上,一个点突破了,后面就豁然开朗了。所以有些问题,不能死闷,要先思考,然后查资料,然后问有经验的人…

C++各大有名库的介绍之C++标准库
C各大有名库的介绍之C标准库标准库中提供了C程序的基本设施。虽然C标准库随着C标准折腾了许多年,直到标准的出台才正式定型,但是在标准库的实现上却很令人欣慰得看到多种实现,并且已被实践证明为有工业级别强度的佳作。1、Dinkumware C Libra…

自己动手——实现 Dustjs 中间件
Dustjs是我个人比较喜欢的一个JS模版引擎,原因有两个,一是,同时支持客户端和服务端渲染,模版编译成JS后使用,性能好;二是,有大公司的支持,Linkedin有专门的Dustjs版本(本…
如何利用离散Hopfield神经网络进行高校科研能力评价(2)
如何利用离散Hopfield神经网络进行高校科研能力评价,应用部分

yyyy-MM-dd HH:mm:ss和yyyy-MM-dd hh:mm:ss
做项目,需要24小时制式的时间,误用了yyyy-MM-dd hh:mm:ss,导致出现一个很难发现的bug,现记录下,方便以后查阅。 yyyy-MM-dd hh:mm:ss 12小时制 yyyy-MM-dd HH:mm:ss 24小时制

Asp.Net开发架构设计(二)
上回说到,我们配置了一下UnityConfig层,在这个层中定义了一个IContainerAccessor的接口和一个返回IUnityContainer类型的方法,这个方法的主要作用就是把Service层中的接口类和Business层中的接口实现类装配到UnityContainer中并返回ÿ…
Matlab与线性代数 -- 稀疏矩阵的创建
本文详细介绍了在Matlab中创建稀疏矩阵的三种方法。

uva 10491 Cows and Cars
https://vjudge.net/problem/UVA-10491 题意: a头牛,b辆车,每扇门后面都有一头牛或一辆车 开始选手选择一扇门 然后主持人打开c扇有牛的门(选中的除外) 然后选手换一扇门 问最后选手选的门后面是车的概率 开始选牛的概…
ssh免密码登录的原理
工作第一天,就需要登录各种服务器,免密码登录无疑能大大的提高工作效率。以前只知道配置,今天了解了下原理。 免密码登录原理 图解,server A免登录到server B: 1.在A上生成公钥私钥。 2.将公钥拷贝给server B,要重命…

mysql-cluster 安装配置
mysql-cluster免编译包下载:https://dev.mysql.com/downloads/file/?id469881 新版本支持只把索引和用到的数据加载到内存,而不是老版本的整个数据库都得加到内存中wget https://cdn.mysql.com//Downloads/MySQL-Cluster-7.5/mysql-cluster-gpl-7.5.6-l…

ExtJs学习笔记(5)_Ajax示例
ExtJs对于Ajax的使用非常简单,看下面的代码: 1.Html页: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns"http://www.w3.o…
Matlab与线性代数 -- 稀疏矩阵的图形显示
本文详细说明了Matlab中稀疏矩阵可视化的过程。

浏览器及时感知服务端数据变化的方式
需求 在公司,有一个需求,是浏览器实时获取服务端数据变化,然后根据变化做相应的动作。需求场景如下:手机端扫描二维码,然后获取待取件订单列表,点击取件,进行取件,同时远端打印机打…

拥抱Node.js 8.0,N-API入门极简例子
本文摘录自《Nodejs学习笔记》,更多章节及更新,请访问 github主页地址。欢迎加群交流,群号 197339705。 N-API简介 Node.js 8.0 在2017年6月份发布,升级的特性中,包含了N-API。编写过或者使用过 node扩展的同学&#x…
什么是标记符控制的分水岭算法
本文首先指出传统分水岭算法的不足,然后介绍了标记符控制的分水岭算法,最后通过实例演示了该算法在图像分割中的应用。该微信图文由安晟提供。

.NE 后退刷新验证码
Response.Buffer true; Response.Expires -1; Response.ExpiresAbsolute DateTime.Now.AddDays(-1); Response.Expires0; Response.CacheControl "no-cache"; 转载于:https://www.cnblogs.com/lmjob/archive/2008/09/01/128096…
intellij打开工程在每个java文件上有个红色的无效符的解决办法
说明该类不是可编译文件。在project Structure中(快捷键ctrlaltshifts)选Modules将你带红圈的文件添加上,将你带红圈的文件夹设为Sources。一般是src文件夹,点Sources文件夹,然后点击OK。设置为可编译文件再去工程中看…

[zt] petshop4.0 详解之三
三、PetShop数据访问层之消息处理在进行系统设计时,除了对安全、事务等问题给与足够的重视外,性能也是一个不可避免的问题所在,尤其是一个B/S结构的软件系统,必须充分地考虑访问量、数据流量、服务器负荷的问题。解决性能的瓶颈&a…

windows下Bullet 2.82编译安装(Bullet Physics开发环境配置)
平台:Win7,VS2010 1. Bullet库的组织 下图是Bullet_User_Manual中的截图: 从中可见,Bullet的LinearMath(线性数学模块),其上是BulletCollision(碰撞检测模块),…