初识AWK

2024-09-01 05:32
文章标签 初识 awk

本文主要是介绍初识AWK,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

关于AWK是我在一篇博客上看到的。当然那个博主也是一个牛人,这里是传送门:我的大学-徐宥
AWK其实是Unix/Linux下处理文本的一门语言,语言的名字来自于三位创始人姓氏的首字母。都是贝尔实验室的。三位分别是:阿尔佛雷德·艾侯、彼得·温伯格和布莱恩·柯林 其中最后一位是圣经:C Progarmming Language的作者。

AWK是用于处理文本的编程语言工具。一般情况下,它把输入序列分别一条条记录,其中默认的分隔符为换行符;而每一行又会被分为一些域,默认的域分割符为空格或者Tab。

AWK程序由一系列的模式-动作对组成。这里类似于数据结构中的关联数组Key—-Value写做:

        pattern { action }

其中Pattern表示要匹配的模式,如果某个记录(即一般某行)匹配制定的模式,便执行相应的动作。当然,pattern和action都可以省略不行,无pattern则默认匹配全部的记录。无action则是打印全部记录。
下面是几个简单的示例。(我也是初学,欢迎拍砖)
假设现在宥一个employee的文件,内容如下:

ID   Name    Position   Department  Salary   
100  Thomas  Manager    Sales       $5,000
200  Jason   Developer  Technology  $5,500
300  Sanjay  Sysadmin   Technology  $7,000
400  Nisha   Manager    Marketing   $9,500
500  Randy   DBA        Technology  $6,00

打印其中的第二条和第四条记录

awk '{ print $2,$4 }' employee

效果如下:

Name Department
Thomas Sales
Jason Technology
Sanjay Technology
Nisha Marketing
Randy Technology

查找其中的Nisha和Jason

awk '/Nisha/ , /Jason/' employee

效果如下:

400  Nisha   Manager    Marketing   $9,500
500  Randy   DBA        Technology  $6,00

查找其中大于属于Manager 或者 Developer 且薪水不等于$5000

awk ' ($3=="Manager" || $3=="Developer") && $5!="$5,000" ' employee

结果如下:

200  Jason   Developer  Technology  $5,500
400  Nisha   Manager    Marketing   $9,500

打印Jason的部门

awk 'NR==3 { print $4 } ' employee

输出如下:

Technology

其中NR是内置变量,表示已经读入的记录数,即行数。一部分内置变量及作用如下:

NR:已输入记录的条数。
NF:当前记录中域的个数。记录中最后一个域可以以$NF的方式引用。
FILENAME:当前输入文件的文件名。
FS:“域分隔符”,用于将输入记录分割成域。其默认值为“空白字符”,即空格和制表符。FS可以替换为其它字符,从而改变域分隔符。
RS:当前的“记录分隔符”。默认状态下,输入的每行都被作为一个记录,因此默认记录分隔符是换行符。
OFS:“输出域分隔符”,即分隔print命令的参数的符号。其默认值为空格。
ORS:“输出记录分隔符”,即每个print命令之间的符号。其默认值为换行符。
OFMT:“输出数字格式”(Format for numeric output),其默认值为"%.6g"

AWK脚本

除了以命令行的方式之外,我门还可以写一个awk的脚本然后键入相应的命令运行。假设现在有一个FilewOwner的程序(打印当前目录下的文件和它的拥有者)
可以编写一个如下的脚本:

!/bin/awk -f                                                                   
#Unix users have to change $9 to $8                                             
BEGIN{ printf "%-20s %-20s\n","File","Owner" }#running                                                                        
{ printf "%-20s %-20s\n",$9,$3 }#Ending                                                                         
END{ print "--Done--" }

键入如下两个命令

ls -l > FileOwner
awk -f FileOwner.awk FileOwner

输出如下:

File                 Owner               employee             mark                
FileOwner            mark                
FileOwner.awk        mark                
statis.awk           mark                
The_Kite_Runner      mark                
--Done--

其中BEGIN END是AWK的内置关键字

BEGIN{}         //表明执行前 执行的语句
{......}        //要执行的语句
END{......}       //执行后的语句

其中-f参数表明这是一个awk文件 FileOwner是一个输入数据
printf 看到了么? 简直和C语言的printf没什么区别

以上

参考资料:
http://www.grymoire.com/Unix/Awk.html#uh-2
http://coolshell.cn/articles/9070.html
https://zh.wikipedia.org/wiki/Awk
http://www.thegeekstuff.com/2010/01/awk-introduction-tutorial-7-awk-print-examples/

这篇关于初识AWK的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1126076

相关文章

Linux操作系统 初识

在认识操作系统之前,我们首先来了解一下计算机的发展: 计算机的发展 世界上第一台计算机名叫埃尼阿克,诞生在1945年2月14日,用于军事用途。 后来因为计算机的优势和潜力巨大,计算机开始飞速发展,并产生了一个当时一直有效的定律:摩尔定律--当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。 那么相应的,计算机就会变得越来越快,越来越小型化。

docker学习系列(一)初识docker

在第一版本上线之后公司,我们决定将之前使用的开源api文档项目转移到本公司的服务器之上,之前用的是showdoc,showdoc利用的是php技术,作为java程序员表示需要快速部署php环境以及apach容器都需要时间,所以采用第二种方法,即利用docker进行快速部署(虽然学习成本也不比php少)。 一、docker简介 docker的官网是https://www.docker.com,

框架template初识

框架初识 框架就是一个别人帮我们搭好的舞台,造好了很多现成的工具供我们使用,让开发过程更快速、简洁。 Gin框架介绍 Gin 是一个用 Go (Golang) 编写的 HTTP Web 框架。 Gin是一个用Go语言编写的web框架。它是一个类似于martini 但拥有更好性能的API框架, 由于使用了 httprouter,速度提高了近40倍。 第一个Gin示例 package mai

【数据结构】--初识泛型

1. 包装类 在Java中,由于基本类型不是继承自Object,为了在泛型代码中可以支持基本类型,Java给每个基本类型都对应了一个包装类型。 1.1 基本数据类型和对应的包装类 除了 Integer 和 Character, 其余基本类型的包装类都是首字母大写。 1.2 (自动)装箱和(自动)拆箱 装箱(装包): 把 基本数据类型 变为 包装类类型 的过程 叫做装箱。 反汇编指

初识Linux · 进度条

目录 前言: 1 缓冲区和回车换行 2 进度条 前言: 我们目前学习了些许知识,已经足够支持我们写一个非常非常小的项目了,即进度条,相信大家都有过下载游戏,等待游戏更新完成的时候,那么此时就有一个进度条,代表着游戏的更新进度,那么我们今天就来模拟实现这个过程,在此之前,我们需要一些预备知识。 1 缓冲区和回车换行 回车换行?是的,你没有看错,相信不少人对换行有一定的误解,我们

Linux初识线程

前言 前面在介绍进程的时候,说过进程的内核表述是"进程是承担资源分配的基本实体",但是我们至今都没有介绍如何理解他?本期我们就会介绍! 目录 前言 一、再谈地址空间和页表 1、OS对物理内存的管理 • 为什么4KB是OS进行I/O的基本单位? 2、再谈页表 • 二级页表 • 如何找到一个变量的所有字节? • 虚拟地址是如何转为物理地址的? • 理解动态内存管理 • 为什么对

初识命名空间

1.创建两个命名空间 ip netns add host1 ip netns add host2 2.  查看命名空间 ip netns ls 3 、 创建veth ip -netns host1 link add veth0 type veth peer name host1-peer 4、 查看命名空间接口  ip -netns host1 address 5、 把hos

Linux进程初识:OS基础、fork函数创建进程、进程排队和进程状态讲解

目录 1、冯诺伊曼体系结构 问题一:为什么在体系结构中存在存储器(内存)? 存储单元总结: 问题二:为什么程序在运行的时候,必须把程序先加载到内存? 问题三:请解释,从你登录上qq开始和某位朋友聊天开始,数据的流动过程。 2、操作系统 2.1操作系统的概念: 我们首先要明白什么是管理: 2.2为什么要有操作系统? 2.3操作系统如何保证稳定和安全呢?(利用系统调用函数解决)

初识string(一)and内存管理

对类和对象的补充:缺省参数在函数定义中从右向左依次赋值,如果从右向左有一个参数没有赋值缺省参数,则左边的变量就不能在赋缺省参数,类中的变量可以赋缺省参数并且没有限制。 在类定义中我们总是看到函数后加const。这其实是调用常量类对象或类对象的意思。 一、引言 俗话说“工欲善其事,必先利其器。”一门语言创造的初衷一定是为了交流和记录重要的事。计算机语言肯定也不例外,虽然计算机语言创造的初衷单纯

数据可视化01-初识echart

1、echart官网 http://echarts.baidu.com/index.html 2、echart特性 ECharts,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖轻量级的矢量图形库 ZRender,提供直观,交互丰富,可高度个性