二十八、awk

awk:流式编辑器,针对文档的行进行操作。awk兼具sed的所有功能,且更强大。可以对每段做匹配,不能更改文件内容,不像sed有-i选项能更改内容。

截取文档中的某段,示例:

-F:指定分隔符,若不加-F,则以空格或tab为分隔符。print为打印的动作,用来打印某个字段。$1为第一个字段,以此类推,$0表示整行。

# awk -F ':' {print $1} test.txt                      打印第一段

# head -n2 test.txt |awk -F ':' '{print $1}'     打印前两行的第一段

# head -n2 test.txt |awk -F ':' '{print $0}'     打印前两行整行(所有段)

# awk -F ':' '{print $1,$2,$4}' test.txt           多打印几段,用逗号隔开;也可用#,但是#麻烦一点,要用双引号括起来,示例:

# awk -F ':' '{print $1"#"$2"#"$4}' test.txt

root#x#0

bin#x#1

daemon#x#2

# awk -F ':' '{print $0}' test.txt                      打印所有行

不指定分隔符,示例:

# awk '{print $1}' 1.txt

1

aa

cc

# cat 1.txt

1  2

aa  bb

cc  d

匹配字符或字符串

# awk '/ot/' test.txt                      指定字符为ot

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologi

# awk  -F ':' '$1 ~/oo/' test.txt

root:x:0:0:root:/root:/bin/bash

精确匹配,第一段里包含oo的行,1后加个~。~为匹配的意思。这就是比grep和sed更强大的地方,对段匹配。同样也支持正则,如o+,o*等等。所有符号都不用加脱义字符,这是awk比grep和sed方便的地方。

# awk  -F ':' '/root/ {print $1,$2} /user/ {print $1,$2}' test.txt  多次匹配

先匹配root,再匹配user。

条件操作符

逻辑符号判断,==为等于,还有>、>=、<、<=、!=等,!=为不匹配。若把比较的数字用双引号括起来,awk会认为是字符,不括起来会认为是数字。

# awk -F ':' '$3=="0"' test.txt

# awk -F ':' '$3>="0"' test.txt

# awk -F ':' '$3>=500' test.txt

匹配数字时就不要加双引号,否则认为是字符

# awk -F ':' '$7!="/sbin/nologin"' test.txt   是字符串,所以要加上双引号

# awk -F ':' '$3<$4' test.txt  两个段之间进行逻辑比较,第三段小于第四段

||和&&,分别表示“或者”,“并且”。示例:

# awk -F ':' '$3<"4" && $3<"7"' test.txt

此处4和7代表字符,所以要用双引号括起来。

# awk -F ':' '$3>1000 || $7=="/bin/bash"' test.txt

第三段大于1000,或者第七段等于/bin/bash的。

# awk -F ':' '$3>1000 || $7 ~ /bash/' test.txt

匹配第七段为bash的,或者第三段大于1000的。

awk的内置变量

awk常用变量:OFS、NF和NR。

OFS:和-F选项有类似的功能,也是用来定义分隔符的,但是它是在输出的时候定义。

NF:表示用分隔符分隔后一共有多少段

NR:表示行号

OFS用法示例:

# head -n5 test.txt |awk -F ':' '{OFS="#"} {print $1,$3}'

定义分隔符为#,也可以定义为@

root#0

bin#1

daemon#2

adm#3

lp#4

更高级的用法,示例:

# awk -F ':' '{OFS="#"} {if ($3<1000) {print $1,$3,$4}}' /etc/passwd

if:如果,判断的作用。如果$3<1000 则打印出 $1$3$4 ,输出并以#分隔显示。

NF用法示例:

# awk -F ':' '{print NF":" $0}' test.txt  显示所有段有多少段。

# awk -F ':' 'NF==7 && $1 ~ /root|sync/' test.txt   配合匹配一起用

# head -n3 /etc/passwd |awk -F ':' '{print NF}'

7

7

7

# head -n3 /etc/passwd |awk -F ':' '{print $NF}'

/bin/bash

/sbin/nologin

/sbin/nologin

此处NF是多少段,$NF是最后一段的值。

NF:表示用分隔符分隔后一共有多少段

NR用法示例:

# awk -F ':' '{print NR":" $0}' test.txt  显示所有段的行号

# head -n3 /etc/passwd |awk -F ':' '{print NR}'

1

2

3

# awk -F ':' 'NR<=10' test.txt  前十行,NR可作为判断条件。

NR也可配合段匹配一起使用,示例:

# awk -F ':' 'NR<=10 && $1 ~ /root|sync/' test.txt

NR:表示行号

# awk -F ':' '{print $NR":"$NF}' test.txt 显示出的内容将从$1开始往后推。

awk中的数学运算

awk可以更改段值,示例:

# head -n3 test.txt  | awk -F ':' '$1="root"'

root x 0 0 root /root /bin/bash

root x 1 1 bin /bin /sbin/nologin

root x 2 2 daemon /sbin /sbin/nologin

# head -n3 test.txt  | awk -F ':' '{OFS=":"} $1="root"'

root:x:0:0:root:/root:/bin/bash

root:x:1:1:bin:/bin:/sbin/nologin

root:x:2:2:daemon:/sbin:/sbin/nologin

此处是一个等于号,是赋值的意思,两个等于号就是匹配出来的意思,要分清楚。可以看到前三行的第一段都变为了root。可以直接定义分隔符为“:”。

计算某个段的总和,示例:

# awk -F ':' '{(tot=tot+$3)}; END {print tot}' test.txt

4610

(表示每一行的第三段相加,最后再print求和)

END:awk特有语法,表示所有的行都执行。

if:判断。

for:循环。

# awk -F ':' '{if ($1=="root") {print $0}}' test.txt

root:x:0:0:root:/root:/bin/bash

先判断第一段有root的,再打印整行。

原文地址:http://blog.51cto.com/13576245/2086298

时间: 2024-08-18 22:40:13

二十八、awk的相关文章

【Unity 3D】学习笔记二十八:unity工具类

unity为开发者提供了很多方便开发的工具,他们都是由系统封装的一些功能和方法.比如说:实现时间的time类,获取随机数的Random.Range( )方法等等. 时间类 time类,主要用来获取当前的系统时间. using UnityEngine; using System.Collections; public class Script_04_13 : MonoBehaviour { void OnGUI() { GUILayout.Label("当前游戏时间:" + Time.t

企业搜索引擎开发之连接器connector(二十八)

通常一个SnapshotRepository仓库对象对应一个DocumentSnapshotRepositoryMonitor监视器对象,同时也对应一个快照存储器对象,它们的关联是通过监视器管理对象DocumentSnapshotRepositoryMonitorManagerImpl实现的 DocumentSnapshotRepositoryMonitorManagerImpl类要实现那些行为,先查看其实现接口DocumentSnapshotRepositoryMonitorManager定义

每日算法之二十八:Longest Valid Parentheses

Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses substring. For "(()", the longest valid parentheses substring is "()", which has length = 2. Another example is &

angular学习笔记(二十八)-$http(6)-使用ngResource模块构建RESTful架构

ngResource模块是angular专门为RESTful架构而设计的一个模块,它提供了'$resource'模块,$resource模块是基于$http的一个封装.下面来看看它的详细用法 1.引入angular-resource.min.js文件 2.在模块中依赖ngResourece,在服务中注入$resource var HttpREST = angular.module('HttpREST',['ngResource']); HttpREST.factory('cardResource

Welcome to Swift (苹果官方Swift文档初译与注解二十八)---199~208页(第四章-- 流程控制)

Value Bindings (绑定值) 在switch的case中可以绑定一个或者多个值给case体中的临时常量或者变量,这个成为绑定值. 代码样例: let anotherPoint = (2, 0) switch anotherPoint { case (let x, 0):   println("on the x-axis with an x value of \(x)") case (0, let y):   println("on the y-axis with

Cocos2d-x 3.x 图形学渲染系列二十八

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解>电子工业出版社等. CSDN视频网址:http://edu.csdn.net/lecturer/144 昨天,刚从丈母娘家回来,继续博客的更新,接着Cocos2d-x 3.x图形学渲染系列二十七继续系列二十八的编写. 接下来读取FBX模型文件信息,首先要做的是把读取的模型信息进行归类并

工作那些事(二十八)项目管理模式:项目型、职能型、矩阵型

在一个项目中,项目经理有多大权利,可以动用哪些资源,取决于项目管理模式,项目管理模式由公司的CTO来决定.简而言之,项目管理有三种模式:项目型.职能型.矩阵型. 下面先看看这三种模式,对项目经理来说都是什么作用. 1项目型 将所有的能兵强将集结在一起,财务部.业务部.IT管理部等的精英们脱离原有的岗位.形成一个正式的部门,并由项目经理领导.这样的优势是项目经理的权利很强.资源充足,所有的项目经理都希望有这样的团队.但是就公司而言,单独团队对公司整体资源的浪费,是显而易见的:对被抽调的个人而言,脱

二十八、Linux下Vim工具常用命令

在linux下做开发,甚至是只做管理维护工作,也少不了Vim的使用.作为一个新手,我也是刚刚接触,本节将我日常使用或收集的Vim常用命令记录下来. 当然,直接在命令行上输入:vimtutor,就可以学习到Vim的所有命令了.Vim很强大,很多牛人在vim里集成很多插件什么的,但这里只介绍基本vim命令 移动命令 h "左 j "下 k "上 l "右 w "光标移动到下一个单词的首字符 a word forward b "光标移动到上一个单词的首

winform学习日志(二十八)----------将汉字转化为拼音,正则表达式和得到汉字的Unicode编码

一:上图,不清楚的看代码注解,很详细了 二:具体代码 窗体代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Text.RegularExpressio

微信小程序把玩(二十八)image组件

原文:微信小程序把玩(二十八)image组件 image组件也是一个程序不可缺少的,可以这样说一个app中image组件随处可以看到,一般 image有两种加载方式第一种是网络图片第二种是本地图片资源,都用src属性去指定. 重点属性: 三种缩放模式 九种剪切方式 wxml <!--3中是缩放模式 scaleToFill 不保持纵横比缩放图片,使图片的宽高完全拉伸至填满image元素 aspectFit 保持纵横比缩放图片,使图片的长边能完全显示出来.也就是说,可以完整地将图片显示出来. asp