awk详解【一】

awk简介:

awk是贝尔实验室1977年搞出来的文本神器,对于熟悉使用linux的朋友们来说,awk无疑是强大的。说到awk,就不得不提到一本书。《the awk programming language》据说这本书要将近1k呢。好吧,我没看过。其实linux下有很多强大的文本编辑工具包括(sed |nl |ed |tr |cut |fold |strings等等)先从awk开始吧

【参考手册可以看看下面的链接地址】

http://www.gnu.org/software/gawk/manual/gawk.html#Built_002din-Variables

http://www.gnu.org/software/gawk/manual/gawk.html#Statements

http://www.gnu.org/software/gawk/manual/gawk.html#Built_002din

http://www.gnu.org/software/gawk/manual/gawk.html#Regexp

awk程序结构

AWK是一种处理文本文件的语言。它将文件作为记录序列处理。在一般情况下,文件内容的每行都是一个记录。每行内容都会被分割成一系列的域,因此,我们可以认为一行的第一个词为第一个域,第二个词为第二个,以此类推。AWK程序是由一些处理特定模式的语句块构成的。AWK一次可以读取一个输入行。对每个输入行,AWK解释器会判断它是否符合程序中出现的各个模式,并执行符合的模式所对应的动作。

awk程序是由一系列模式--动作对组成的,写做:pattern { action}

其中pattern表示AWK在数据中查找的内容,而action是在找到匹配内容时所执行的一系列命令。输入行被分成了一些记录:记录默认由换行符分割,因此输入会按照行进行分割。程序使用给定的条件一个个的测试每条记录,并执行测试通过的条件所对应的actionpatternaction都可以省略不写。无pattern默认匹配全部的记录;而无action则是打印原始记录。简单的AWK表达式之外,pattern可以是BEGINEND;这两种条件对应的action分别是读取所有的记录之前和之后。同时,如pattern1, pattern2的条件表示符合条件pattern1pattern2的记录及其之间的部分。

开始实战一下吧:

以/etc/password文件为例:我需要打印用户名和用户所在的gid号。

其中单引号中的{}就是awk语句,且只能用单引号包含

这里我使用-F参数指定吧 “:”作为域的分隔符。$1....$n表示第几个域。$0表示整个行。

匹配输入行中的范围

yes命令代表重复其参数,默认为"y",这里我们让其输出"root and /bin/bash",动作快输出带有行号的内容。NR会记录行号从1开始。“%”求模操作符。所以,NR % 4 ==1对第1,5,9为真。类似的像,NR % 4 ==3对3,7,11等为真。范围模式在其第一部分匹配之前为假,并在第二部分匹配之前为真。然后再第二次匹配上其第一部分前为假。而sed命令测试用于截取其前7行的输出,否则yes命令会一直重复下去,当然也可以用head命令,等效于head -n7.

关于内置变量:

如何过滤记录:

&&代表同时成立,==是比较运算符号,比如:!= |> |< |>= |<=

这里我们可以引入内置变量NR:

指定域分隔符匹配

-F参数等效于BEGIN{FS=":"},可以同时指定多个分隔符,awk -F ‘[,:]‘

下面以\t作为域分隔符,\t即tab键

未完待续

时间: 2024-11-09 03:49:50

awk详解【一】的相关文章

linux awk详解与应用

文章来自于本人个人博客: linux awk详解与应用 1.awk awk是一个强大的文本分析工具,它可以通过分析文本来生成一个数据报告.它的原理就是读取每行的输入,然后按照分隔符切分(默认是空格),再进行定制计算. awk '{print $1}' /etc/passwd   #打印出passwd文件的所有行的第一列 这是awk的基础语法,在awk中$n代表列数,即$1--第一列,$2---第二列....,但是$0代表整行 接下来我们按照指定的分隔符打印数据: awk -F ':' '{pri

linux sed&awk详解

sed sed为文本处理三剑客之一.本身就是一个管道命令,可以将文件进行增加,修改,删除,选取等操作. 格式:sed [-nrefi] [command] "文本字符串" 选项: -r: 支持扩展正则表达式: -n: 静默模式:(sed有个模式空间和保持空间,默认sed会将执行的结果保存到模式空间里面,而模式空间默认情况是输出在屏幕上,加了-n,则阻止将模式空间的内容输出到屏幕上) -f:/path/to/script_file:从指定的文件中读取脚本并运行 -e script1 -e

linux sed,awk详解

sed命令:sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有 改变,除非你使用重定向存储输出.Sed主要用来自动编辑一个或多个文件:简化对文件的反复操作:编写转换程序等.sed使用参数[[email protected] ~]# sed [-nefr] [动作]-n :使

Linux文本处理三剑客之awk详解

前言 awk是一款强大的报告生成器,不同于sed和grep,它的侧重点是如何把文本信息更好的展示出来,常用与统计和格式化输出.awk相当于微型的shell,有着自己一套语法结构,例如:循环结构,数组,条件判断,函数,内置变量等功能.处理对象一般纯文本文件或纯文本信息. 用法详解 基本语法 awk [options] 'program' file file ... awk [options] 'PATTERN{action}' file file ... -F CHAR:输入分隔符 awk的输出

Linux下Awk详解(转载)

什么是Awk Awk是一种小巧的编程语言及命令行工具.(其名称得自于它的创始人Alfred Aho.Peter Weinberger 和 Brian Kernighan姓氏的首个字母).它非常适合服务器上的日志处理,主要是因为Awk可以对文件进行操作,通常以可读文本构建行. 我说它适用于服务器是因为日志文件,转储文件(dump files),或者任意文本格式的服务器终止转储到磁盘都会变得很大,并且在每个服务器你都会拥有大量的这类文件.如果你经历过这样的情境--在没有像Splunk或者其他等价的工

linux基础学习第二十二天之AWK详解

内容: 1.awk输出(print.printf) 2.awk变量(内建变量和定义变量) 3.awk数组 4.awk重定向输出 5.awk操作符 6.awk常见模式类型 7.awk控制及循环语句 8.awk内置函数 awk:(其名称得自于它的创始人 Alfred Aho .Peter Weinberger 和 Brian Kernighan 姓氏的首个字母) awk是一款强大的报告生成器,不同于sed和grep,它的侧重点是如何把文本信息更好的展示出来,常用与统计和格式化输出. awk相当于微型

Shell脚本之awk详解

一.基本介绍 1.awk: awk是一个强大的文本分析工具,在对文本文件的处理以及生成报表,awk是无可替代的.awk认为文本文件都是结构化的,它将每一个输入行定义为一个记录,行中的每个字符串定义为一个域(段),域和域之间使用分割符分割. 2.功能:流控制.数学运算.进程控制.内置的变量和函数.循环和判断 3.工作原理: awk 会把每行进行一个拆分,用相应的命令对拆分出来的“段”进行处理. (1)行工作模式,读入文件的每一行,会把一行的内容,存到$0里 (2)使用内置的变量FS(段的分隔符,默

linux中awk详解

awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息 awk处理过程: 依次对每一行进行处理,然后输出 awk命令形式: awk [-F|-f|-v] 'BEGIN{} //{command1; command2} END{}' file [-F|-f|-v]   大参数,-F指定分隔符,-f调用脚本,-v定义变量 var=value '  '          引用代码块 BEGIN   初始化代码块,在对每一行进行处理之前,初始

awk详解

一.awk简介 awk的意思是报告生成器,能根据输入信息,把信息格式化后显示,继而出现new awk(nawk)在windows上实现,gawk,awk实现在linux上.awk是一种编程语言,在linux/unix下对文本和数据进行处理,是一款强大编程工具.在命令行中使用,更多作为脚本来使用. awk处理文件和数据的方式:逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行操作.如果没有指定处理动作,则把匹配行打印,如果没有指定模式,则所有行都处理.gawk是awk的GN