Linux文本三剑客之awk

awk:报告生成器,格式化文本输出

AWK: Aho, Weinberger, Kernighan --> New AWK, NAWK

GNU awk, gawk

gawk - pattern scanning and processing language

基本用法:gawk [options] ‘program‘ FILE ...

program: PATTERN{ACTION STATEMENTS}

语句之间用分号分隔

print, printf

选项:

-F:指明输入时用到的字段分隔符

-v var=value: 自定义变量

1、print

print item1, item2, ...

要点:

(1) 逗号分隔符

(2) 输出的各item可以字符串,也可以是数值;当前记录的字段、变量或awk的表达式

(3) 如省略item,相当于print $0

2、变量

2.1 内建变量

FS:input field seperator,默认为空白字符

OFS:output field seperator,默认为空白字符

RS:input record seperator,输入时的换行符

ORS:output record seperator,输出时的换行符

NF:number of field,字段数量

{print NF}, {print $NF}

NR:number of record, 行数

FNR:各文件分别计数;行数

FILENAME:当前文件名

ARGC:命令行参数的个数

ARGV:数组,保存的是命令行所给定的各参数

2.2 自定义变量

(1) -v var=value

变量名区分字符大小写

(2) 在program中直接定义

3、printf命令

格式化输出:printf FORMAT, item1, item2, ...

(1) FORMAT必须给出

(2) 不会自动换行,需要显式给出换行控制符,\n

(3) FORMAT中需要分别为后面的每个item指定一个格式化符号

格式符:

%c: 显示字符的ASCII码

%d, %i: 显示十进制整数

%e, %E: 科学计数法数值显示

%f:显示为浮点数

%g, %G:以科学计数法或浮点形式显示数值

%s:显示字符串

%u:无符号整数

%%: 显示%自身

修饰符:

#[.#]:第一个数字控制显示的宽度;第二个#表示小数点后的精度

%3.1f

-: 左对齐

+:显示数值的符号

4、操作符

算术操作符:

x+y, x-y, x*y, x/y, x^y, x%y

-x

+x: 转换为数值

字符串操作符:没有符号的操作符,字符串连接

赋值操作符:

=, +=, -=, *=, /=, %=, ^=

++, --

比较操作符:

>, >=, <, <=, !=, ==

模式匹配符:

~:是否匹配

!~:是否不匹配

逻辑操作符:

&&

||

!

函数调用:

function_name(argu1, argu2, ...)

条件表达式:

selector?if-true-expression:if-false-expression

# awk -F: ‘{$3>=1000?usertype="Common User":usertype="Sysadmin or SysUser";printf "%15s:%-s\n",$1,usertype}‘ /etc/passwd

5、PATTERN

(1) empty:空模式,匹配每一行

(2) /regular expression/:仅处理能够被此处的模式匹配到的行

(3) relational expression: 关系表达式;结果有“真”有“假”;结果为“真”才会被处理

真:结果为非0值,非空字符串

(4) line ranges:行范围

startline,endline:/pat1/,/pat2/

Note: 不支持直接给出数字的格式

~]# awk -F: ‘(NR>=2&&NR<=10){print $1}‘ /etc/passwd

(5) BEGIN/END模式

BEGIN{}: 仅在开始处理文件中的文本之前执行一次

END{}:仅在文本处理完成之后执行一次

6、常用的action

(1) Expressions

(2) Control statements:if, while等

(3) Compound statements:组合语句

(4) input statements

(5) output statements

7、控制语句

if(condition) {statments}

if(condition) {statments} else {statements}

while(conditon) {statments}

do {statements} while(condition)

for(expr1;expr2;expr3) {statements}

break

continue

delete array[index]

delete array

exit

{ statements }

8、array

关联数组:array[index-expression]

index-expression:

(1) 可使用任意字符串;字符串要使用双引号

(2) 如果某数组元素事先不存在,在引用时,awk会自动创建此元素,并将其值初始化为“空串”

若要判断数组中是否存在某元素,要使用"index in array"格式进行

weekdays[mon]="Monday"

若要遍历数组中的每个元素,要使用for循环

for(var in array) {for-body}

~]# awk ‘BEGIN{weekdays["mon"]="Monday";weekdays["tue"]="Tuesday";for(i in weekdays) {print weekdays[i]}}‘

Note:var会遍历array的每个索引

9、函数

9.1 内置函数

数值处理:

rand():返回0和1之间一个随机数

字符串处理:

length([s]):返回指定字符串的长度

sub(r,s,[t]):以r表示的模式来查找t所表示的字符中的匹配的内容,并将其第一次出现替换为s所表示的内容

gsub(r,s,[t]):以r表示的模式来查找t所表示的字符中的匹配的内容,并将其所有出现均替换为s所表示的内容

split(s,a[,r]):以r为分隔符切割字符s,并将切割后的结果保存至a所表示的数组中

~]# netstat -tan | awk ‘/^tcp\>/{split($5,ip,":");count[ip[1]]++}END{for (i in count) {print i,count[i]}}‘

9.2 自定义函数

时间: 2024-08-08 07:02:03

Linux文本三剑客之awk的相关文章

linux 文本三剑客之awk

awk简介 awk同sed.grep被称为linux文本处理三剑客,都起源于行编辑器ed.awk继承了行编辑器的特点,循环的读取文本的每一行(或者是分隔符分割的每一段文本)直至文本结束,但是awk加入了段分割符的概念.将每次读入的行进行再次分割.awk每次读取的行都只是未经过awk语句处理的对象.或读取行后会根据段分割符在将行分成多个对象.结构近似数组,然后进行指定语句的操作.作为一款报表生成器,作用是对对文本内容进行各种排版,进而格式化显示. awk有自己的语法,可以说是一款独立的编程语言.

Linux 文本三剑客之awk 木石前盟

前言 一.木石前盟 众所周知,我们大中华上下5千年历史,其中当属"四大名著"最让人津津乐道.<红楼梦>一书更为四大名著之首,被评为中国古典章回小说的巅峰之作,是中国最受重视的一部文学作品.此书由清代作家曹雪芹所作,故事主线为贾宝玉.林黛玉及薛宝钗三人的爱情与婚姻悲剧,以及贾府等四大家族的没落. 故事开头即提到木石前盟一事.说到林黛玉的前身是绛珠仙草,贾宝玉的前身是神瑛侍者.<红楼梦>第一回"甄士隐梦幻识通灵 贾雨村风尘怀闺秀 "中有这样一段描

Linux文本三剑客之awk的使用

文本处理三剑客: grep.egrep.fgrep:称为文本过滤工具 sed:称为流编辑器,行编辑器 awk:称为报告生成器,主要用于格式化文本输出 awk:Aho,Weinberher,Kernighan 由这个三个作者创建而成,最初是用在UXIN系统上面,后来被GNU组织不断对其进行更新,就形成了gawk,现在linux上用的都是gawk. [[email protected] tmp]# which awk /bin/awk [[email protected] tmp]# ll -d /

linux文本三剑客匹配网卡IP地址大PK(CentOS 7系统)

    运维工程师在做配置的过程中很多时候都需要去获取目标服务器网卡上的IP地址,那究竟用什么方式获取更便捷了,博主今天就带大家使用linux文本三剑客分别获取一下网卡的IP地址,最后我们再来对比一下. 实验环境: 系统:CentOS 7.2 网卡张数:双网卡 linux文本三剑客之grep 获取ifconfig输出中的IP地址 ifconfig | egrep -o "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-1][0-9]|22[0-3])\>.(\

Linux文本处理工具AWK使用解析

在linux系统上有三大文本处理工具分别是:grep,sed,awk,这次主要来看看awk. awk  option  'pattern'  file -F    指定分隔符: -v     申明自定义变量: 查看当前系统上,用户名和用户shell,输出分隔符为~. # awk -F: 'BEGIN{OFS="~";print "UserName   Shell"}{print $1,$7}END{print "================end===

文本三剑客之awk进阶篇

此篇主要讲解awk控制语句,捎带说明getline和NR_FNR命令的使用.其中会用到awk基础知识,若有疑惑,可点击文本三剑客之awk基础篇进行翻阅. 示例文件 以下为通篇会用到的几个示例文件: [[email protected] awk_file]# cat file.txt name yu shu wai rick 80 86 90 long 68 89 78 jack 66 60 82 [[email protected] awk_file]# cat file.txt1 name y

Linux上文本三剑客之awk详解

AWK介绍 Linux 文本处理工具三剑客:grep.sed.awk.其中grep是一种文本过滤工具:sed是文本行编辑器,而awk是一种报表生成器,就是对文件进行格式化处理的,但这里的格式化不是文件系统的格式化,而是对文件内容进行各种"排版",进而格式化显示:在Linux之上我们使用的是GNU awk 简称gawk,并且gawk就是awk的链接文件,因此系统上使用的awk和gawk是一样的.gawk是一种过程式编程语言.gawk还支持条件判断.数组.循环等编程语言中所有可以使用的功能

Linux文本三剑客超详细教程---grep、sed、awk

awk.grep.sed是linux操作文本的三大利器,合称文本三剑客,也是必须掌握的linux命令之一.三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂.grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对文本进行较复杂格式处理. 1.grep 1.1 什么是grep和egrep Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来(匹配到的标红).grep全称是Global

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