Awk报告生成器

一、awk概念以及使用格式

Awk是一个强大的报告生成器,awk自身具有遍历的功能,支持条件循环,就是一个编程语言,awk 的输出  1、print命令 后接各项目使用逗号分割,而输出时则使用输出符分割。2、输出是个字符串或数值,当记录的字段、变量或awk的表达式:数值会被隐式转换为字符串后输出。3、print后面如果省略相当于$0 输出空白print“”。4、显示当前系统上。如果print后接选项没有逗号只有空格输出的结果连载一起{print $1 $7}

1、Awk 的变量分为内置变量和自定义变量

FS:Field Sperator输入时字段分隔符

#awk ‘BEGIN{FS=”:”}{print $1,$7}’ /etc/passwd

RS:Record Seperator 输入时的行分隔符也就是换行符

#awk ‘BEGIN{RS=”:”}{print $1,$7}’ /etc/passwd

OFS:output filed seperator 输出时字段分隔符

# awk ‘BEGIN{OFS=”:”}{print $1,$7}’/etc/passwd

ORS:OUTPUT ROW SERPERATOR 输出时行分隔符

#awk ‘BEGIN{ORS=”:”}{print $1,$7}’ /etc/passwd

NF: NUMBER OF FIELD 字段数

# awk ‘BEGIN{FS=":"}{print NF $1,$7}‘ /etc/passwd

NR:NUMBER OF RECORD 行数,所有文件一并计数

# awk ‘BEGIN{FS=”:”;OFS=”:”}{print NR,$1,$7}’ /etc/passwd

FNR: 多个文件时个文件分别计数

#awk ‘BEGIN{FS=”:”;OFS=”:”}{print FNR,$1,$7}’ /etc/passwd /etc/group

ARGV:数组保存命令本身这个字符。ARGC:保留awk参数的个数

#awk ‘BEGIN{print ARGV[0],ARGV[1] ARGC}’ /etc/passwd /etc/group

awk可自定义变量,其格式-v var_name = VALUE 在此变量名区分大小写。

#awk ‘BEGIN{a=”Hi awk”}{print a}’ /etc/group 在此/etc/group有多少行,就会输出多少行Hi awk,如果要输出一行则#awk ‘BEGIN{a=”Hi awk”}{print a}’还可以#awk -v a=”Hi awk” ‘BEGIN{print a}’

1.2、awk的printf命令使用要点:1)要指定format;2)不会自动换行,要换行需执行\n;3)format用于为后面的每个item指定其输出格式。而format格式的指示符都是以%开头,后跟一个字符;%c:显示字符ASCII;%d,%i:十进制整数;%e,%E:科学计数法显示数值;%f:显示浮点数;%g:%G以科学计数法格式或浮点数格式显示数值;%s:显示字符串;%u:显示无字符串;%%:显示%自身。

1.2.1、%后可接修饰符:#:表示显示宽度;-:左对齐;+:显示数值的符号。例如%-10s:表示10个字符的宽度并左对齐。

#awk -F: ‘{printf % “10s,%20s\n”,$1,$7}’ /etc/passwd,输出结果中间有逗号隔开当然也可以用空格隔开#awk -F: ‘{printf “%10s %20s\n”,$1,$7}’ /etc/passwd逗号换成空格即可。还可以使右边的左对齐#awk -F: ‘{printf % “10s %-20s\n”,$1,$7}’ /etc/passwd。下面看一下对浮点数的操作。

如上截图中第一行没有换行符,而二三行加入换行符,其效果一目了然,美观大方。最重要的是有保留有效位的功能。下面再来看一下%e和%f的使用。

1.2.2、awk的操作符有算数操作符+,-,*,/,%,-x(负值),+x(转换为数值)。赋值操作符:=,+=,-=,/=,%=,^=或者**=,++,--。如果模式自身是=,要写成/=/。比较操作符:<,>,<=,>=,==,+=,!=,~:模式匹配,左边的字符串被右边的模式匹配为真,否则为假。~=:与上相反。逻辑操作符:&&,||。条件表达式:selector?if-true-expression:if-false-expression。函数调用function_name(argu1,argu2)。条件表达式应用如下。

2、awk模式

2.1 Regrexp:格式为/PATTERN/,仅处理被/PATTERN/匹配到的行。如# awk -F: ‘/root/{print $0}’/etc/passwd

2.2 Espression:表达式,其结果为非0或为非空字符串时满足条件,仅处理满足条件的,例如:# awk -F: ‘{printf “%10s %-10d\n”,$1,$3}’ /etc/passwd。

2.3 Ranges:行范围,此前地址定界,startline,endline,仅处理行范围内的行。

2.4 BEGIN/END: 特殊模式,仅在awk命令的program运行之前之前(BEGIN)或运行之后(END)

2.5 Empty:空模式,匹配任意行。

3、常用action:1)表达式,比如赋值表达式,2)还可以是控制语句,3)哈可以是组合语句,4)输入语句,5)输出语句(print、printf)。

4、控制语句详解

4.1 if-else,格式 if(condition){then body} else{else body}例如:# awk -F: ‘{if($3>=500){print $1,"is a common user"}else{print $1,"is an admain or system user."}}‘ /etc/passwd。在看一例:找出/etc/inittab 中字段数大于等于8的行,# awk ‘{if (NF>=8) {print}}‘ /etc/inittab

4.2 while循环,格式:while(condtion){while body}条件为真进入循环。例如输出/etc/inittab下的奇数个字符的行# awk ‘{i=1;while(i<=NF){printf "%s ",$i;i+=2};print""}‘ /etc/inittab。

Length()函数:取字符串的长度。例如,取出/etc/inittab中字符数大于6的字符:# awk ‘{i=1;while (i<=NF){if (length($i)>=6){print $i};i++}}‘ /etc/inittab

4.3  for循环:其格式:for(variable assignment; condition;iteration process){for body},例 # awk ‘{for(i=1;i<=NF;i+=2){printf "%s ",$i};print ""}‘ /etc/inittab则是找出/etc/inittab下奇数字符串的行。再看使用for循环取出/etc/inittab中字符数大于6的字符:# awk ‘{for(i=1;i<=NF;i++){if(length($i)>=6)print $i}}‘ /etc/inittab

for循环可以用来遍历数组元素:语法格式for(i in array){for body}。下面是一个实例# awk ‘BEGIN{for(i=1;i<=5;i++){array[i] = i*2-1;}for(i in array){print i"="array[i]}}‘

4=7

5=9

1=1

2=3

3=5

并没有按顺序输出。

4.4 case语句,语法格式:switch(expression){case VALUE or /RGEEXP/:stateme1;...default: staemeN}

4.5 next 表示提前结束本行的处理而进入下一行的处理。例:# awk -F: ‘{if($3%2==0) next;print $1,$3}‘ /etc/passwd,表示不对满足条件的那一行处理。

5、数组,如果引用一个数组元素时,事先不存在,awk会自动创建元素并初始化为空串,因此要判断某数组是否存在某元素,使用index in array这种格式。如果要遍历数组中的每一个元素需要使用如下特殊结构。For (var in array){for body},其中

# netstat -tan | awk ‘/^tcp/{++state[$NF]}END{for (s in state){print s state[s]}}‘

6、awk的内置函数,split(string,array[,fieldsep[,seps]])功能:将string表示的字符串以filedsep为分割符进行切片,并切片后的结果保存至array为名的数组中:例如:awk ‘BEGIN{split(“root:x:0:0”,user,”:”);for(i in user) print user[i]}’

在其内部保存user[1]为root,user[2]为x,user[3]为0,user[4]为0。

时间: 2024-10-09 00:54:10

Awk报告生成器的相关文章

awk: 报告生成器 简单用法

1:tail -5  /etc/fstab | awk '{print $2,$4}' 打印/etc/fstab 文件里后五行的第2和第4段内容 [[email protected] temp]# cat /etc/fstab # # /etc/fstab # Created by anaconda on Wed Dec 30 06:43:45 2015 # # Accessible filesystems, by reference, are maintained under '/dev/di

awk——报告生成器

文本处理三剑客--grep,awk,sed:grep是基于pattern过滤输出,有三种模式,grep,egrep以及fgrep:sed则是一种流编辑器,进行插入删除,常用于进行文本中的替换操作:而awk的功能就更加强大了,作为一种格式化文本工具,awk通过分隔符控制文本,awk默认的分隔符是空格:awk还可以通过pattern匹配按行进行遍历,通过算术表达式对行进行排查,还可以for,while,continue,break等控制语句找到符合条件的信息进行输出:他还可以对输出的结果进行修饰采用

awk:报告生成器

awk:报告生成器 格式化后显示信息 语法: awk [options] 'script' file1 file2, ... awk [options] 'PARTTERN { action }' file1 file2, ... 最常见的action:print,printf awk的基本特征: a.每一次取一行 b.根据指定的分隔符(不指定是位空白字符)将该行切割位列,使用$0(整行),$1,$2,$3...(第一列,第二列,...) c.可以指定行号,列号,切割符,操作后分隔符 案例: c

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

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

报告生成器-awk命令

AWK是一个优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一.这种编程及数据操作语言(其名称得自于它的创始人阿尔佛雷德·艾侯.彼得·温伯格和布莱恩·柯林汉姓氏的首个字母)的最大功能取决于一个人所拥有的知识.awk经过改进生成的新的版本nawk,gawk,现在默认linux系统下日常使用的是gawk,用命令可以查看正在应用的awk的来源(ls -l /bin/awk ) 格式: awk [options] 'script' file1 file2,... awk [

Linux报告生成器工具awk

awk:根据输入的信息格式化后显示出来 1.1.awk基本用法 awk [options] 'script' file1,file2,.... 或 awk [options] 'PATTERN [ACTION]' file1,file2.... 示例:awk '{print $1}' test.txt options: -F:定义分隔符 示例awk -F: 以冒号为分隔符 1.2.awk内置变量 (1)记录变量 FS:设置默认分割字符  示例awk -F: 以冒号为分隔符 RS:设置默认换行符

1-27 awk 基本使用

大纲: 色彩: awk基本使用 ##################################################### 一.色彩:shell中,设置输出文本色彩(前景色,背景色) 在Shell中,可以给输出的字体设置颜色(前景色.背景色) 颜色 黑色 红色 绿色 黄色 蓝色 紫色 蓝色 白色 字体编码 30 31 32 33 34 35 36 37 背景编码 40 41 42 43 44 45 46 47 1.字背景色.字体颜色.字体效果可单独使用也可组合使用前后顺序没有关系

awk用法

grep:文本过滤器, grep "pattern" input_file .... sed: 流编辑器: sed "command/PATTERD/" awk:报告生成器.能够将输入的信息格式化之后显示:包括nawk版本,gawk版本 用法: awk [option] 'script' file1 file2, ... awk [option] 'PATTERN {action}' file1, file2. ... print, printf 1 [email 

awk学习随常记录

回顾:字符串处理 数组: 数组 : declare -a index: 0- 关联数组 : declare -A 编程:数据结构和算法 字符串处理: 切片.查找替换.查找删除.变量赋值 GUN awk: 文本处理三工具: grep ,sed ,awk grep:grep.egrep .fgrep:文本过滤工具:pattern sed:行编辑器 模式空间.保持空间 awk:报告生成器,格式化文本输出; AWK: aho,weinberger, kernigha 命名就用三个人名字的首字母 awk主