浅尝awk

前几天写了sed,这次来继续学习一下它的好兄弟,awk,用了两者,一个这样的感觉,两者都可以用来处理匹配,如果想对文本做处理,sed的删除,匹配,替换要用的频繁一些,如果要深入文本的每一行,对每一行进行一些列处理,例如,统计,然后格式化输出,awk就可以派上用场了

查看自己ubuntu当前的awk

which awk,其实用的是/usr/bin/mawk

在学习sed篇中,我们知道,sed是读取文本的每一行到一个模式空间,然后对模式空间的内容进行处理,其实awk差不多,它也是对模式空间进行处理,但是它做的处理动作时"切片"

1.awk的变量

为什么要先说变量呢,因为不用变量,awk基本上就是废(游戏玩多了^-^)

首先我们把/etc/passwd里面的第一行取出来备用

head -1 /etc/passwd > test.txt

$0  当前处理的记录(默认是行,除非指定RS)

awk ‘BEGIN{FS=":"}{print $0}‘ test.txt
root:x:0:0:root:/root:/bin/bash

$1---$n 当前的第几个字段,和命令行参数类似

awk ‘BEGIN{FS=":"}{print $1,$3}‘ test.txt

FS 这里记住:F表示域field,S表示分隔seperate

这里有两种写法:我喜欢用这种,简洁明了

awk -F: ‘{print $1,$2,$3}‘ test.txt

RS 想想,R表示记录record,S同上

awk ‘BEGIN{RS=":"}{print $1,$3}‘ test.txt

NF number of field 可以理解为多少列

awk ‘BEGIN{FS=":"}{print NF}‘ test.txt

NR number of record 可以理解为多少行

awk ‘BEGIN{FS=":"}{print NR}‘ test.txt

OFS  FS是处理这行的时候的分隔,O是指输出,OFS就是指输出时候的分隔符

awk ‘BEGIN{FS=":"}{print $1,$2,$3}‘ OFS="#" test.txt

ORS 同理

2.awk的格式化输出

awk的处理完文本之后还可以按照格式化进行输出,很强大吧,其实说白了就是printf

awk -F: ‘{printf "%s#%s#%s\n" ,$1,$2,$3}‘ test.txt

%d 十进制整数

%f 浮点数

%s 字符串

%% 百分号

- 左对齐

虽然简单,但是灵活运用,效果特殊

3.awk的算术运算

awk支持的运算符:+ - * / % **  awk甚至提供了一些数学函数sin(x),cos(x)等

还可以做一些统计运算,统计某一列的值

awk ‘{ sum += $1 }; END { print sum }‘ file
awk ‘NR!=1{a[$6]++;} END {for (i in a) print i ", " a[i];}‘

4.模式

awk ‘模式{命令}‘ file

模式可以是一下几种:

1.正则表达式

awk -F : ‘/^r/{print $1}‘ /etc/passwd

2.表达式

awk -F: ‘$3>=500{print $1,$3}‘ /etc/passwd
awk -F: ‘$7 ~/bash$/{print $1,$7}‘ /etc/passwd
awk -F: ‘$7 !~/bash$/{print $1,$7}‘ /etc/passwd

3.BEGIN和END

BEGIN{ 这里面放的是执行前的语句 }

END {这里面放的是处理完所有的行后要执行的语句 }

{这里面放的是处理每一行时要执行的语句}

例如:

awk ‘BEGIN{test="123";print test}‘

发现其实没有文件也可以使用awk,因为BEGIN不依赖于输入,但是注意打印内部变量不必使用$

浅尝awk,布布扣,bubuko.com

时间: 2024-08-09 06:34:59

浅尝awk的相关文章

浅尝MongoDB

浅尝MongoDB NoSQL Mongo 数据库 安装mongoDB Linux 以linux环境为例,安装mongodb,最简单的方式就是 利用自带的包管理器 我的环境是 linux deepin 15.4 (基于debian 8) sudo apt install mongodb ~$ mongo -version MongoDB shell version: 3.2.11 当你看到这个说明你的mogodb已经安装完成. Windows 略 windows很容易 去官网下个包,无脑下一步即

浅尝key-value数据库(二)——MongoDB的优与劣

浅尝key-value数据库(二)——MongoDB的优与劣 MongoDB的名字取自英文单词"humongous"的中间五个字母,是一个C++开发的基于分布式文件存储的数据库开源项目.他的文件存储格式是BSON(Binary JSON),因此可以高效存储二进制数据,例如图像.视频等大对象. 由于我是CentOS x86_64的系统,于是安装MongoDB非常简单: vi /etc/yum.repos.d/mongo.repo [10gen] name=10gen Repository

浅尝key-value数据库(一)——一览NoSQL

浅尝key-value数据库(一)——一览NoSQL 最近由于一个项目的关系,研究了一下key-value数据库这个最近很火的概念.本系列从项目需求的角度分析并测试了几个key-value数据库的性能. key-value数据库,又称作NoSQL数据库,他的最基本的基础原理就是CAP. CAP是2000年PODC上Eric Brewer提出的一个概念,即 C -> Consistency; A -> Availability; P -> Tolerance to network Part

浅尝key-value数据库(三)——MongoDB的分布式

浅尝key-value数据库(三)——MongoDB的分布式 测试了单机MongoDB的随机读和写入性能,这一节来讲一讲MongoDB的分布式. MongoDB的分布式分成两种,一种是Replication,一种是Sharding.我们主要来看一下Sharding. 先贴一张结构示意图: MongoDB Auto-Sharding的配置非常简单,在不同的机器分别开启shard, config server, mongos的进程即可.(假设config serevr的IP为192.168.1.11

浅尝ECMAScript6

浅尝ECMAScript6 简介 ECMAScript6 是最新的ECMAScript标准,于2015年6月正式推出(所以也称为ECMAScript 2015),相比于2009年推出的es5, es6定义了更加丰富的语言特性,基于该标准的Javascript语言也迎来了语法上的重大变革.本文列举了部分es6新特性,希望之前没接触es6的小伙伴读完本文能对下一代js编程有一个初步的认识. 箭头函数 箭头函数用 "=>"简化函数定义,类似于C#, Java8中的Lambda表达式,支

浅尝CKRule规则引擎

最近在参与一家材料公司的ERP系统开发,主要负责仓储系统.由于该公司的业务流程相对复杂且多变,做得那是万般痛苦,成天沉浸在业务变更代码大改的死循环里,久而久之,有种遥遥无期的绝望. 怎样才能很好或者说比较轻松的去适应这样的复杂业务变化?最近真没少在园里看大神们的贴子,但是收获甚微,也许是我个人理解的深度不够.前两天无聊的时候,把心里的唠叨在圈子里发了下,后来有人给我推荐了个叫“CKRule”的规则引擎.规则引擎?小弟孤陋寡闻还是第一次听,一番百度后找到了CKRule的官网,果断下载了试用版.文件

Python图形界面开发编程:wxPython(浅尝篇)

Python 提供了多个图形开发界面的库,几个常用 Python GUI 库如下: Tkinter: Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,同样可以应用在 Windows 和 Macintosh 系统里.Tk8.0 的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中. wxPython:wxPython 是一款开源软件,是 Python 语言的一套优秀的 GUI 图形库,

来自后端的突袭? --开包即食的教程带你浅尝最新开源的C# Web引擎 Blazor

来自后端的突袭? --开包即食的教程带你浅尝最新开源的C# Web引擎 Blazor 在今年年初, 恰逢新春佳节临近的时候. 微软给全球的C#开发者们, 着实的送上了一分惊喜. 微软正式开源Blazor ,将.NET带回到浏览器. 这个小惊喜, 迅速的在dotnet开发者中间传开了. 而就在昨天(2018年3月22日) Blazor发布了它的第一次Release. Blazor到底是个什么样的东西呢?我们是否真的可以携着C#语言进入前端的市场中? 不如现在就跟我一起体验dotnet blazor

Linux的文本处理工具浅谈-awk sed grep

Linux的文本处理工具浅谈 awk   老大 [功能说明] 用于文本处理的语言(取行,过滤),支持正则 NR代表行数,$n取某一列,$NF最后一列 NR==20,NR==30 从20行到30行 FS竖着切,列的分隔符 RS横着切,行的分隔符 [语法格式] awk [–F] [“[分隔符]”] [’{print$1,$NF}’] [目标文件] awk 'BEGIN{FS="[列分隔符]+";RS="[行分隔符]+";print "-GEGIN-"