文档章节

运维利器之AWK

蔡佳娃
 蔡佳娃
发布于 2017/09/04 21:54
字数 1107
阅读 24
收藏 0

功能

    一个行文本处理工具,可以逐行处理文件中的数据。

语法

    本文中提到的cjw.txt内容大致如下:

Installing fontpackages-filesystem-1.41-1.1.el6.noarch
warning: fontpackages-filesystem-1.41-1.1.el6.noarch: Header V3 RSA/SHA256 Signature, key ID c105b9de: NOKEY
Installing liberation-fonts-common-1.05.1.20090721-5.el6.noarch
Installing xml-common-0.6.3-32.el6.noarch
Installing iso-codes-3.16-2.el6.noarch
Installing setup-2.8.14-20.el6.noarch
Installing filesystem-2.4.30-3.el6.i686
Installing dejavu-fonts-common-2.30-2.el6.noarch
Installing xkeyboard-config-2.6-6.el6.noarch
Installing control-center-filesystem-2.28.1-38.el6.i686
Installing paktype-fonts-common-2.0-8.el6.noarch

语法说明

awk 'pattern + {action}'

desc:
1. 单引号''是为了和shell命令区分开
2. 大括号{}表示一个命令分组
3. pattern是一个过滤器,表示符合pattern的行才进行action处理
4. action是处理动作
5. 使用#作为注释

eg.
#显示cjw.txt中的第三行到第五行
awk 'NR==3,NR==5{print}' cjw.txt

#输出
Installing liberation-fonts-common-1.05.1.20090721-5.el6.noarch
Installing xml-common-0.6.3-32.el6.noarch
Installing iso-codes-3.16-2.el6.noarch

常用命令选项

-F fs   fs指定输入分隔符,fs可以是字符串或正则表达式,如-F:

-v var=value   赋值一个用户定义变量,将外部变量传递给awk

-f scripfile  从脚本文件中读取awk命令

-m[fr] val   对val值设置内在限制

pattern说明

    pattern参数可以是grep正则中的一个,正则使用/pattern/。

#显示cjw.txt中,正则匹配Install的行
awk '/Install/' cjw.txt

#输出
Installing fontpackages-filesystem-1.41-1.1.el6.noarch
Installing liberation-fonts-common-1.05.1.20090721-5.el6.noarch
Installing xml-common-0.6.3-32.el6.noarch
Installing iso-codes-3.16-2.el6.noarch
...

    pattern和action可以只有其一,但不能两者都没有,默认的action是print。

#显示cjw.txt中,长度大于80行的内容
awk 'length($0)>80' cjw.txt
#等价于
awk 'length($0)>80 {print $0}' cjw.txt


#显示cjw.txt中,长度大于80的行号和内容
awk 'length($0)>80 {print NR, $0}' cjw.txt

#输出
2 warning: fontpackages-filesystem-1.41-1.1.el6.noarch: Header V3 RSA/SHA256 Signature, key ID c105b9de: NOKEY

内置变量

FS 分隔符,默认是空格
NR 当前行数,从1开始
NF 当前记录字段个数
$0 当前记录
$1~$n 当前记录第n个字段
#显示cjw.txt中第3行到第5行的第一列与最后一列
awk 'NR==3,NR==5{print $1,$NF}' cjw.txt

#输出
Installing liberation-fonts-common-1.05.1.20090721-5.el6.noarch
Installing xml-common-0.6.3-32.el6.noarch
Installing iso-codes-3.16-2.el6.noarch


#按定界符"-"分割每行的内容,然后打印输出第一列和第二列
awk 'BEGIN{FS="-"}{print $1,$2}' cjw.txt

#输出
Installing fontpackages filesystem
warning: fontpackages filesystem
Installing liberation fonts
Installing xml common
Installing iso codes
Installing setup 2.8.14

内置函数

gsub(r, s) 在$0中用s代替r
index(s, t) 返回s中t的第一个位置
length(s) s的长度
match(s, r) s是否匹配r
split(s, a, fs) 在fs上将s分成序列a
substr(s, p) 返回s从p开始的子串
#将文本中的Installing替换为cjw,输出可以替换的行号以及替换后的内容
awk 'gsub("Installing", "cjw"){print NR, $0}' cjw.txt

#输出
1 cjw fontpackages-filesystem-1.41-1.1.el6.noarch
3 cjw liberation-fonts-common-1.05.1.20090721-5.el6.noarch
4 cjw xml-common-0.6.3-32.el6.noarch
5 cjw iso-codes-3.16-2.el6.noarch
...


#输出cjw.txt文本中的包含common的行号及其行内容
awk 'match($0,"common") {print NR, $0}' cjw.txt

#输出
3 Installing liberation-fonts-common-1.05.1.20090721-5.el6.noarch
4 Installing xml-common-0.6.3-32.el6.noarch
8 Installing dejavu-fonts-common-2.30-2.el6.noarch
11 Installing paktype-fonts-common-2.0-8.el6.noarch
...

操作符

    支持+、-、*、、、%、++、-、+=等运算操作。支持==、!=、>、~等判断操作。

控制语句

    BEGIN和END本质是一个pattern。BEGIN用于awk程序开始开始前,做一些初始化的工作;END用于awk程序结束前,做一些收尾的工作。

    流程控制语句与其他语言几乎相同,就不在此赘述。

#使用空格将info进行切割,输出切割后数组的长度以及函数split的返回值
awk 'BEGIN{info="it is a test";lens=split(info,tA," "); print length(tA),lens;}'

#输出
4 4


#控制流的使用
awk 'BEGIN { 
    test=100; 
    if (test>90) { 
        print "very good"; 
    } else if (test>60) { 
        print "good"; } 
    else { 
        print "no pass"; 
    } 
}'

#输出
very good

 

© 著作权归作者所有

共有 人打赏支持
蔡佳娃
粉丝 16
博文 54
码字总数 48865
作品 0
海淀
程序员
awk分组求和分组统计次数

awk分组求和分组统计次数 运维生存时间 - 运维生存时间2017-12-037 阅读 Linux命令awk 发表评论 A+ 所属分类: Linux命令 分组求和 以第一列 为变量名 第一列为变量,将相同第一列的第二列数...

运维生存时间 - 运维生存时间
2017/12/03
0
0
Linux运维处理及监控脚本【Linux运维之道之脚本案例】

Linux运维处理及监控脚本【Linux运维之道之脚本案例】 Linux日常运维工作一个一个命令搞是一件苦事情,作为新一代IT运维工作者,在工作中不断探索提升效率方法和经验,摸索出不少脚本,减轻日...

yaabb163
06/26
0
0
【安全牛学习笔记】基本工具-tcpdump

一.简介 No-GUI的抓包工具 Linux 、Unix 系统默认安装 二.抓包使用 默认值抓68个字节 抓包指令 tcpdump -i eth0 -s 0 -w file.pcap 0表示直接抓取整个包 tcpdump -i eth0 port 读取抓包文件 ...

安全牛课堂
2017/11/09
0
0
用shell脚本实现增加,删除用户,查询更改UID和GID以及统计用户数

学习linux是从基础的命令开始的,当熟悉命令后,我们就得学习shell脚本的编写。在实际运维中,我们不可能一直盯着服务器看,机器式的维护,而是通过脚本,实现自动化运维,这也是运维的一种趋...

lyj19911101
2014/05/14
0
0
【安全牛学习笔记】kali TOP10 安全工具:

kali TOP10 安全工具: burpsuite截断信息 maltego收集信息 metasploit framework渗透测试框架,有许多安全工具 nmap网络发现扫描器 owasp-zap 渗透、拦截、扫描工具 sqlmap web注入探测 wi...

安全牛课堂
2017/11/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

ES6 Promise

Promise promise是异步编程的一种解决方案 1 什么是异步? 异步模式,每一个任务有一个或多个回调函数(callback),前一个任务结束后,不是执行后一个任务,而是执行回调函数,后一个任务则...

NDweb
17分钟前
0
0
Python百分登顶年度编程语言排行榜

今天 IEEE Spectrum 发布了 2018 年度顶级编程语言排行榜。该榜单可根据流行趋势、职业方向、语言类型等多个标准各自细分生成榜单,也可以综合多个标准进行排列,使用者可以根据自己的需求过...

六库科技
21分钟前
0
0
consul笔记

安装和启动就不说了,很简单。 注册一个服务: http://localhost:8500/v1/agent/service/register put请求,json格式内容如下 { "ID": "userServiceId", //服务id "Name": "userService", //服...

朝如青丝暮成雪
21分钟前
0
0
iOS CollectionView 的那些事

UICollectionView是开发中用的比较多的一个控件,本文记录UICollectionView在开发中常用的方法总结,包括使用UICollectionViewFlowLayout实现Grid布局、添加Header/Footer、自定义layout布局...

aron1992
22分钟前
0
0
linux tar.gz zip 解压缩 压缩命令

http://apps.hi.baidu.com/share/detail/37384818 download ADT link http://dl.google.com/android/ADT-0.9.6.zip download SDK link http://dl.google.com/Android/android-sdk_r11-linux_......

owensliu
24分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部