Linux基础(20)文本处理三剑客之awk

awk是比sed更强大的文本处理工具,sed通常是以一整行为处理单位,而awk则可以按照指定的分隔符将一整行分为多个字段单独进行处理。

awk的语法

awk -F separator ‘BEGIN{command}condition1{command1}condition2{command2}...END{command}‘ filename #除了处理filename之外 awk也以处理标准输入

-F 指定分隔符,默认是空格符 例如如果指定:为分隔符,则可以这样-F:

BEGIN用于指定在处理第一行之前应该执行的指令,如果command由多条,则可以用分号分开

END 用于指定处理完所有文本行之后应该执行的指令

中间的condition{command} 用来指定在处理文本行的时候应该执行的指令,condition用来指定条件通常是表达式,command用来指定满足condition的时候应该执行的操作。

awk的几个常用的内建变量

$0 当前处理的一整行内容

$1 当前处理的行使用separator分隔后的第一个字段

$2 。。。。。的第二个字段

$#。。。。。以此类推

NR 当前正在处理的行号

NF 当前处理的行有多少个字段

FS 当前指定的空格符,默认是空格键 其实完全可以用-F选项来替代

awk使用print 或者printf来向屏幕打印符合条件的内容,两者还是有一定区别的

使用print打印的话,字段之前使用,分隔,而打印的时候字段内容之间是用以空格分开

一个例子

  awk -F: ‘{print $1,$3}‘ /etc/passwd

如果非要指定格式的话可以使用"" 里面加入转移字符 比如说"\t"

  awk -F: ‘{print $1"\t"$2}‘ /etc/passwd

相比之下printf就更常用一些,printf可以方便以指定的格式打印内容

printf的基本格式  printf "pattern" content

在awk中使用printf的时候需要注意一下几点

1.pattern与content之间使用,分开

2.使用printf打印变量内容的时候,不要使用$var_name(除了$0,$1等内建变量)

3.被打印的变量之间也要使用,分开

4.需要在pattern中手动指定换行符\n

  awk -F: ‘{printf "%10s\t%10s\n"},$1,$3‘ /etc/passwd

awk的功能远远不止与此,下面介绍一些常用的awk的其他功能

1.使用算数运算符

在awk的command中可以进行常见的算数运算

常见的算数运算符由+ - * / %  +=  -=  %=  /=  ++  --

2.使用比较操作符

> < >= <=  ==  != ~

值得一提的是 ~ 用来判断某个字段是否符合正则表达式的模式,正则表达式的模式需要用//括起来

例子

 awk -F: ‘$NF~/nologin$/{print $1,$NF}‘ /etc/passwd

3.使用控制语句

if else语句

 awk -F: ‘{if($3<499){print $1,"System User"}else{print $1,"Common User"}}‘ /etc/passwd

需要注意的两点,与condition{command}不同,if条件语句是写在{}里面的,如果是执行语句由多条的话,必须使用{}括起来,如果执行语句只有一条的话,则可以省略{}

4.使用循环语句

while

 awk -F: ‘{i=1;while(i<=3){printf "%-10s" ,$i;i++}}‘ /etc/passwd #对于每行只打印前三个字段

for

 awk -F: ‘{for(i=1;i<=3;i++){print $i}}‘ /etc/passwd

使用for还可以用来遍历数组

语法结构为 for(var in array){command} #注意var是下标,不是数组的内容

 awk -F: ‘{SHELL[$NF]++}END{for (S in SHELL){print S,SHELL[S]}}‘ /etc/passwd #统计每种shell用户的数量

5.continue,break,case,next不怎么常用,这里不在一一介绍

当然awk的功能远不止这些,这里仅仅是列处理最常用的一些功能,想了解更多自行man。

时间: 2024-11-08 20:48:04

Linux基础(20)文本处理三剑客之awk的相关文章

漫漫运维路——文本处理三剑客之awk基础

awk即gawk,是一款在Linux中实现文本格式化输出的文本处理工具,在Linux中与文本过滤工具grep和文本行编辑器sed共同组成Linux中的文本处理三剑客. awk在处理文本时以行为单位,读入整行数据后以指定的分隔符对行进行切片,然后再针对切片后的数据进行处理.如下图所示: 文本经过指定的分隔符进行切片后再对每一片进行处理,然后在根据设定的动作对处理后的文本执行动作,而切片后的文本如果只想引用一部分也可以使用变量进行引用,其引用的各个变量如下表所示: 变量 指代 $0.$N 当前处理行

文本处理三剑客之awk(报告生成器)

文本处理三剑客之awk(报告生成器) awk是一款强大的报告生成器,不同于sed和grep,它的侧重点是如何把文本信息更好的展示出来,常用与统计和格式化输出.awk相当于微型的shell,有着自己一套语法结构,例如:循环结构,数组,条件判断,函数,内置变量等功能. awk在我认为简直就是文本处理时打劫放火一大利器. 例如取出/etc/passwd中的第一列. [root@CentOS6 ~]# awk -F: '{print $1}' /etc/passwd root bin daemon ad

Linux 系统中文本处理“三剑客”之grep

我们写脚本的时候,经常要截取命令输出的某项数据,比如:我要知道主机上有多少块硬盘 这是很方便的.使用grep搜索出我们想要的数据再使用 sed .或 cup 切割就可以取得我们主机的设备名称了,这是我们取数据的一种方法. Egreq 是grep 的升级版,支持扩展表达式.fgrep不支持正则表达式. 使用格式: 1 2 3 4 5 grep [OPTIONS] PATTERN [FILE...]      -o     只打印输出匹配到字符串      -i      做匹配时候忽略大小写   

Linux系统文本处理三剑客之awk

GNU awk: 文本处理三剑客:grep,sed,awk grep,egrep,fgrep:文本过滤工具:pattern sed:行编辑器 模式空间.保持空间 awk:报告生成器,格式化文本输出 gawk - pattern scanning and processing language 基本用法:gawk [options] 'program' FILE ... program:PATTERN{ACTION STATEMENTS} 语句之间用分号分隔 print,printf 选项: -F

文本处理三剑客之awk——从入门到放弃

awk是文本处理三剑客之首,功能及其强大且支持正则表达式(包括基础正则和拓展正则). awk支持(三剑客都支持)以文件作为操作对象,以及从标准输出里面接受内容. [[email protected] ~]# head /etc/passwd | awk -F ":" '{print $1}'rootbindaemonadmlpsyncshutdownhaltmailoperator [[email protected] ~]# head /etc/passwd > test[[e

Liunx文本处理三剑客之awk

AWK是Aho, Weinberger, Kernighan三个开发者的首字母,最早用于Unix中,后用于Liunx中称为gawk(GUN awk),是Linux中文本处理三剑客之一,它是一个报告生成器,可以格式化文本并输出.下面所说的awk即gawk,那么我们一块来看一awk常用的用法: gawk - pattern scanning and processing language 字面翻译为:模式扫描及处理语言.也可以说他是一个简单的编程语言.工作原理如下: 按行读取文本,并根据指明输入时用

文本处理三剑客之一----------awk

简单的说awk是一门类似于shell的编程语言,是一种强大的文本处理工具,它的设计思想来源于 SNOBOL4 .sed .Marc Rochkind设计的有效性语言.语言工具 yacc 和 lex ,当然还从 C 语言中获取了一些优秀的思想. 它有着属于自己的独特的语法表达方式,虽然操作可能会比较复杂,但是语法格式始终都是: awk [options] 'program' file- program: {pattern + action}' 或者  'pattern {action}' patt

linux基础篇-文本三剑客之AWK

awk介绍 ? awk:Aho, Weinberger, Kernighan,报告生成器,格式化文本输出 ? 有多种版本:New awk(nawk),GNU awk( gawk) ? gawk:模式扫描和处理语言? 基本用法:awk [options] 'program' var=value file-awk [options] -f programfile var=value file-awk [options] 'BEGIN{ action;- } pattern{ action;- } E

Linux文本处理三剑客之awk(一)

  AWK是一个优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一.其名称得自于它的创始人阿尔佛雷德·艾侯.彼得·温伯格和布莱恩·柯林汉姓氏的首个字母.awk经过改进生成的新的版本nawk,gawk,现在默认linux系统下日常使用的是gawk.灵活的应用awk能够让我们的日常运维工作效率得到很大的提高. 一.基本用法: awk [options] 'program' var=value file- awk [options] -f programfile var=