awk文本分析工具,Linux系统之文本格式化工具awk

一、文本处理工科具

Linux awk文本分析工具

简介

awk是三个强硬的文书剖析工具,绝对于grep的索求,sed的编辑撰写,awk在其对数码分析并扭转报告时,显得愈抓好大。一句话来讲awk正是把文件逐行的读入,以空格为暗许分隔符将每行切成块,切开的1部分再开始展览各类深入分析管理。

awk有一个不等版本: awk、nawk和gawk,未作专门说明,一般指gawk,gawk 是 AWK
的 GNU 版本。

awk其名称得自于它的祖师 Alfred Aho 、Peter Weinberger 和 Brian
Kernighan 姓氏的第叁个假名。实际上 AWK 的确具备和谐的语言: AWK
程序设计语言 ,
3位创作者已将它正式定义为“样式扫描和拍卖语言”。它同意你创造简短的主次,那一个程序读取输入文件、为数量排序、管理数量、对输入实施总结以及更改报表,还应该有诸多其余的功能。

行使形式

awk ‘{pattern + action}’ {filenames}

固然操作或然会很复杂,但语法总是如此,当中 pattern 表示 AWK
在数额中搜索的内容,而 action
是在找到相称内容时所推行的1体系命令。花括号({})没有要求在程序中始终现身,但它们用于依据特定的格局对一多级指令举办分组。
pattern便是要代表的正则表明式,用斜杠括起来。

awk语言的最基本功能是在文件也许字符串中基于钦命规则浏览和收取音讯,awk抽出新闻后,才能举行其余文件操作。完整的awk脚本常常用来格式化文本文件中的音讯。

万般,awk是以文件的一行为拍卖单位的。awk每接收文件的壹行,然后奉行相应的下令,来拍卖文件。

调用awk

有两种艺术调用awk

一.命令行格局awk [-F field-separator] ‘commands’
input-file(s)其中,commands 是真正awk命令,[-F域分隔符]是可选的。
input-file(s)
是待管理的公文。在awk中,文件的每壹行中,由域分隔符分开的每1项称为多少个域。常常,在不内定-F域分隔符的处境下,默许的域分隔符是空格。二.shell脚本艺术将装有的awk命令插入3个文本,并使awk程序可实施,然后awk命令解释器作为脚本的首行,叁次通过键入脚本名称来调用。也正是shell脚本首行的:#!/bin/sh能够换成:#!/bin/awk三.将有着的awk命令插入三个独立文件,然后调用:awk
-f awk-script-file
input-file(s)其中,-f选项加载awk-script-file中的awk脚本,input-file(s)跟上面的是均等的。

本章重点介绍命令市场价格势。

入门实例

假使last -n 五的出口如下

[[awk文本分析工具,Linux系统之文本格式化工具awk。email protected]
~]# last -n 5 <==仅抽取前五行root pts/一 1九二.16八.壹.100 Tue Feb 101一:二一 still logged inroot pts/一 1玖二.168.一.100 Tue Feb 10 00:四陆 – 0二:28(0一:4壹)root pts/壹 1九2.168.壹.100 Mon Feb 玖 1一:4一 – 18:30 (06:4八)dmtsai
pts/1 19二.16八.1.100 Mon Feb 九 11:④壹 – 1壹:肆壹 (00:00)root tty一 Fri Sep 5
1四:0九 – 1四:10 (00:0一)

若是只是展现近日登6的多少个帐号

#last -n 5 | awk ‘{print $1}’
root
root
root
dmtsai
root

awk工作流程是那样的:读入有’\n’换行符分割的一条记下,然后将记录按钦定的域分隔符划分域,填充域,$0则意味全体域,$一表示第二个域,$n表示第n个域。私下认可域分隔符是”空白键”
或 “[tab]键”,所以$壹表示登入用户,$三代表登陆用户ip,就那样类推。

假定只是显示/etc/passwd的账户

#cat /etc/passwd |awk -F ‘:’ ‘{print $1}’ rootdaemonbinsys

这种是awk+action的演示,每行都会试行action{print $一}。

-F钦定域分隔符为’:’。

1经只是展现/etc/passwd的账户和账户对应的shell,而账户与shell之间以tab键分割

#cat /etc/passwd |awk -F ‘:’ ‘{print $1″\t”$7}’root /bin/bashdaemon
/bin/shbin /bin/shsys /bin/sh

假设只是彰显/etc/passwd的账户和账户对应的shell,而账户与shell之间以逗号分割,而且在有着行加多列名name,shell,在终极一行增加”blue,/bin/nosh”。

cat /etc/passwd |awk -F ‘:’ ‘BEGIN {print “name,shell”} {print $1″,”$7}
END {print
“blue,/bin/nosh”}’name,shellroot,/bin/bashdaemon,/bin/shbin,/bin/shsys,/bin/sh….blue,/bin/nosh

awk专业流程是如此的:先实行BEGING,然后读取文件,读入有/n换行符分割的一条记下,然后将记录按钦点的域分隔符划分域,填充域,$0则意味全体域,$壹代表第叁个域,$n代表第n个域,随后开头实行方式所对应的动作action。接着开端读入第一条记录······直到全数的笔录都读完,最后实施END操作。

寻找/etc/passwd有root关键字的持有行

#awk -F: ‘/root/’ /etc/passwdroot:x:0:0:root:/root:/bin/bash

这种是pattern的利用示例,相配了pattern(这里是root)的行才会实行action(未有钦点action,默许输出每行的内容)。

搜寻协理正则,举个例子找root初步的: awk -F: ‘/^root/’ /etc/passwd

寻找/etc/passwd有root关键字的具有行,并展现相应的shell

# awk -F: ‘/root/{print $7}’ /etc/passwd /bin/bash

这里钦定了action{print $7}

awk内置变量

awk有繁多停放变量用来设置条件新闻,这个变量能够被改变,上面给出了最常用的局地变量。

A奥德赛GC 命令行参数个数A昂科威GV 命令行参数排列ENVIRON
协助队列中系统蒙受变量的应用FILENAME awk浏览的文书名FNKuga浏览文件的记录数(已读当前文件的记录数)FS
设置输入域分隔符,等价于命令行 -F选项NF 浏览记录的域的个数N奥迪Q3已读的总记录数OFS 输出域分隔符OQX56S 输出记录分隔符RAV肆S 调节记录分隔符

除此以外,$0变量是指整条记录。$1表示近日行的首先个域,$二代表方今行的第四个域,……就那样推算。

总括/etc/passwd:文件名,每行的行号,每行的列数,对应的全部行内容:

#awk -F ‘:’ ‘{print “filename:” FILENAME “,linenumber:” NR “,columns:”
NF “,linecontent:”$0}’
/etc/passwdfilename:/etc/passwd,linenumber:1,columns:7,linecontent:root:x:0:0:root:/root:/bin/bashfilename:/etc/passwd,linenumber:2,columns:7,linecontent:daemon:x:1:1:daemon:/usr/sbin:/bin/shfilename:/etc/passwd,linenumber:3,columns:7,linecontent:bin:x:2:2:bin:/bin:/bin/shfilename:/etc/passwd,linenumber:4,columns:7,linecontent:sys:x:3:3:sys:/dev:/bin/sh

应用printf取代print,可以让代码特别从简,易读

awk -F ‘:’
‘{printf(“filename:%10s,linenumber:%s,columns:%s,linecontent:%s\n”,FILENAME,NR,NF,$0)}’
/etc/passwd

print和printf

awk中同时提供了print和printf三种打字与印刷输出的函数。

当中print函数的参数可以是变量、数值恐怕字符串。字符串必须用双引号引用,参数用逗号分隔。如若没有逗号,参数就串联在共同而不能区分。这里,逗号的功效与出口文件的分隔符的功效是同1的,只是后者是空格而已。

printf函数,其用法和c语言中printf基本相似,能够格式化字符串,输出复杂时,printf更加好用,代码更易懂。

awk编程

变量和赋值

除了awk的停放变量,awk还足以自定义变量。

上面总括/etc/passwd的账户人数

awk ‘{count++;print $0;} END{print “user count is “, count}’
/etc/passwdroot:x:0:0:root:/root:/bin/bash……user count is  40

count是自定义变量。之前的action{}里都是唯有二个print,其实print只是三个说话,而action{}能够有三个语句,以;号隔绝。

此处未有起首化count,纵然私下认可是0,可是妥当的做法依旧开端化为0:

awk ‘BEGIN {count=0;print “[start]user count is “, count}
{count=count+1;print $0;} END{print “[end]user count is “, count}’
/etc/passwd[start]user count is
0root:x:0:0:root:/root:/bin/bash…[end]user count is 40

总计有些文件夹下的文本占用的字节数

ls -l |awk ‘BEGIN {size=0;} {size=size+$5;} END{print “[end]size is “,
size}’
[end]size is  8657198

设若以M为单位呈现:

ls -l |awk ‘BEGIN {size=0;} {size=size+$5;} END{print “[end]size is “,
size/1024/1024,”M”}’
[end]size is  8.25889 M

专注,总结不包涵文件夹的子目录。

规范语句

awk中的条件语句是从C语言中借鉴来的,见如下宣示情势:

if (expression) {
 statement; statement; … …}if (expression) { statement;} else {
statement2;}if (expression) { statement1;} else if (expression1) {
statement2;} else { statement3;}
计算有些文件夹下的公文占用的字节数,过滤40玖陆高低的文件(一般都以文件夹):

ls -l |awk ‘BEGIN {size=0;print “[start]size is “, size}
{if($5!=4096){size=size+$5;}} END{print “[end]size is “,
size/1024/1024,”M”}’
[end]size is  8.22339 M

循环语句

awk中的循环语句同样借鉴于C语言,协理while、do/while、for、break、continue,那个重大字的语义和C语言中的语义完全同样。

数组

因为awk中数组的下标可以是数字和字母,数组的下标常常被喻为关键字(key)。值和重大字都存款和储蓄在在那之中的一张针对key/value应用hash的报表里。由于hash不是顺序存款和储蓄,因而在展现数组内容时会发掘,它们并不是依据你预料的相继展现出来的。数组和变量一样,都是在行使时自动创设的,awk也同等会自行剖断其积存的是数字或然字符串。一般来讲,awk中的数组用来从记录中搜聚消息,能够用于总括总和、总计单词以及追踪模板被相称的次数等等。

显示/etc/passwd的账户

awk -F ‘:’ ‘BEGIN {count=0;} {name[count] = $1;count++;}; END{for (i =
0; i < NR; i++) print i, name[i]}’ /etc/passwd
0 root1 daemon2 bin3 sys4 sync5 games……

此间运用for循环遍历数组

awk转义体系与算术操作符 

AWK简单介绍及利用实例

AWK 简要介绍和例子

Shell脚本之AWK文本编辑器语法

正则表明式中AWK的就学和采用

文件数据管理之AWK 图解

如何在Linux中使用awk命令

文件深入分析工具-awk 

正文永远更新链接地址:

awk文本解析工具 简单介绍awk是三个无敌的文书深入分析工具,相对于grep的探索,sed的编写制定,awk在其对数据剖析并生成报告时,显得更结实大。…

简介

grep、sed和awk都是文本处理工科具,就算都是文本管理工科具但却都有各自的优缺点,1种文本管理命令是无法被另贰个一心替换的,不然也不会现出八个文本处理命令了。只可是,相相比较来说,sed和awk功效更加强硬而已,且已单身成1种语言来介绍。

awk是三个强劲的文书分析工具,相对于grep的检索,sed的编辑,awk在其对数码分析并扭转报告时,显得愈发庞大。简单的说awk就是把文件逐行的读入,以空格为暗中同意分隔符将每行切成块,切开的有个别再开始展览各类解析管理。

grep:文本过滤器,假设单纯是过滤文本,可利用grep,其功效要比其余的高繁多;

awk有二个分化版本: awk、nawk和gawk,未作挑升表达,一般指gawk,gawk 是 AWK
的 GNU 版本。

sed:Stream
EDitor,流编辑器,暗中认可只管理格局空间,不管理原数据,纵然您管理的数码是针对性行举行拍卖的,能够利用sed;

awk其名称得自于它的开山 Alfred Aho 、彼得 Weinberger 和 Brian
Kernighan 姓氏的第五个假名。实际上 AWK 的确有所和睦的语言: AWK
程序设计语言 ,
2个人创作者已将它正式定义为“样式扫描和拍卖语言”。它同意你成立简短的次第,那一个程序读取输入文件、为数据排序、管理数量、对输入实行计算以及改变报表,还会有相当多其余的效劳。

awk:报告生成器,格式化今后突显。假诺对拍卖的数码必要扭转报告之类的音信,恐怕您管理的数额是按列实行管理的,最棒使用awk。

利用方式

二、awk能够实现的片段效果

awk ‘{pattern + action}’ {filenames}

  • 将文件文件作为由记录和字段组成的公文数据库

  • 应用变量操作数据库

  • 选拔算术和字符串操作符

  • 行使普通的次第设计布局,举个例子循环和规范化

  • 生帮格式化报告

  • 概念函数

  • 从剧本中施行unix命令

  • 处理unix命令的结果

  • 进而神奇的管理命令行的参数

  • 更便于地管理三个输入流

就算操作恐怕会很复杂,但语法总是如此,在那之中 pattern 表示 AWK
在数据中检索的内容,而 action
是在找到相称内容时所施行的壹密密麻麻命令。花括号({})无需在先后中一贯出现,但它们用于遵照特定的方式对1种类指令张开分组。
pattern正是要表示的正则表明式,用斜杠括起来。

叁、语法格式

awk语言的最基本功效是在文书或然字符串中基于钦赐规则浏览和抽取新闻,awk抽出音信后,工夫拓展任何文件操作。完整的awk脚本平常用来格式化文本文件中的新闻。

1
2
# awk [options] 'script' file1 file2, ...
# awk [options] 'PATTERN { action }' file1 file2, ..

一般说来,awk是以文件的1行为拍卖单位的。awk每接收文件的1行,然后实行相应的指令,来拍卖文件。

1、选项

调用awk

-F fs or –field-separator fs:

有三种办法调用awk

钦定输入文件折分隔符,fs是叁个字符串只怕是一个正则表明式,如-F:

一.命令行情势awk [-F field-separator] ‘commands’
input-file(s)其中,commands 是真正awk命令,[-F域分隔符]是可选的。
input-file(s)
是待管理的文书。在awk中,文件的每一行中,由域分隔符分开的每一项称为二个域。经常,在不钦点-F域分隔符的意况下,默许的域分隔符是空格。二.shell脚本方法将有着的awk命令插入二个文书,并使awk程序可施行,然后awk命令解释器作为脚本的首行,一次通过键入脚本名称来调用。相当于shell脚本首行的:#!/bin/sh能够换到:#!/bin/awk叁.将有所的awk命令插入四个单身文件,然后调用:awk
-f awk-script-file
input-file(s)当中,-f选项加载awk-script-file中的awk脚本,input-file(s)跟上面包车型大巴是同样的。

1
2
3
4
#awk -F: '/root/{print $1,$NF}' /etc/passwd
#awk -F: '/root/{print $1$NF}' /etc/passwd
#awk -F: '/root/{print $1 $NF}' /etc/passwd
#awk -F: '/root/{print $1"#"$NF}' /etc/passwd

本章着重介绍命令行格局。

图片 1

入门实例

-v 选项定义的变量在剧本运转在此以前即存在,能够在剧本的 BEGIN 流程中被调用;

尽管last -n 伍的出口如下

图片 2

[root@www ~]# last -n 5 <==仅抽取前五行root pts/壹 1九二.168.1.十0
Tue Feb 10 11:二壹 still logged inroot pts/一 1玖贰.16捌.一.100 Tue Feb 一千:四六 – 02:28 (01:4一)root pts/一 1玖二.16捌.一.拾0 Mon Feb 玖 11:四壹 – 1捌:30
(0陆:48)dmtsai pts/一 19二.16捌.一.100 Mon Feb 九 1一:肆壹 – 11:肆一 (00:00)root
tty壹 Fri Sep 5 1四:0玖 – 1四:10 (00:0一)

2、awk的输出:print和printf

假如只是彰显近日登入的多少个帐号

⑴、print的利用格式:

#last -n 5 | awk ‘{print $1}’
root
root
root
dmtsai
root

print item1, item2, …

awk工作流程是那样的:读入有’\n’换行符分割的一条记下,然后将记录按钦命的域分隔符划分域,填充域,$0则象征全数域,$壹表示第1个域,$n表示第n个域。暗许域分隔符是”空白键”
或 “[tab]键”,所以$一表示登入用户,$3表示登陆用户ip,就那样推算。

要点:

假如只是展现/etc/passwd的账户

1、各档期的顺序里面利用逗号隔开分离,而输出时则以空白字符分隔;

#cat /etc/passwd |awk -F ‘:’ ‘{print $1}’ rootdaemonbinsys

2、输出的item可以为字符串或数值、当前记下的字段(如$一)、变量或awk的表达式;数值会先转移为字符串,而后再出口;

这种是awk+action的亲自去做,每行都会实施action{print $壹}。

3、print命令前面的item能够省略,此时其功用约等于print $0,
由此,固然想出口空白行,则必要运用print “”;

-F钦定域分隔符为’:’。

在意,在AWK中,$表示字段,用户变量不须求加$,这是AWK与shell只怕Perl不相同之处!在shell中,变量定义时不加$,再一次引述时则必要用$,而在Perl中,无论定义和引用时都急需加$
(Perl中$表示标量,另有@和%符号表示数组和Hash变量)。

假诺只是展现/etc/passwd的账户和账户对应的shell,而账户与shell之间以tab键分割

实例

#cat /etc/passwd |awk -F ‘:’ ‘{print $1″\t”$7}’root /bin/bashdaemon
/bin/shbin /bin/shsys /bin/sh

图片 3

假设只是呈现/etc/passwd的账户和账户对应的shell,而账户与shell之间以逗号分割,而且在富有行增加列名name,shell,在最终1行加多”blue,/bin/nosh”。

⑵、printf的运用格式

cat /etc/passwd |awk -F ‘:’ ‘BEGIN {print “name,shell”} {print $1″,”$7}
END {print
“blue,/bin/nosh”}’name,shellroot,/bin/bashdaemon,/bin/shbin,/bin/shsys,/bin/sh….blue,/bin/nosh

printf format, item1, item2, …

awk专门的学业流程是如此的:先进行BEGING,然后读取文件,读入有/n换行符分割的一条记下,然后将记录按钦命的域分隔符划分域,填充域,$0则象征全部域,$一代表第贰个域,$n代表第n个域,随后开头实施格局所对应的动作action。接着开始读入第三条记录······直到全数的笔录都读完,最后实行END操作。

format格式的提醒符都是%初叶,后跟一个字符,

找寻/etc/passwd有root关键字的装有行

%c

#awk -F: ‘/root/’ /etc/passwdroot:x:0:0:root:/root:/bin/bash

退换数字成ASCII,如printf “%c”, 陆七结实为C。

这种是pattern的施用示例,相配了pattern(这里是root)的行才会施行action(未有钦命action,暗中认可输出每行的内容)。

图片 4

查找辅助正则,比如找root早先的: awk -F: ‘/^root/’ /etc/passwd

%d, %i

寻觅/etc/passwd有root关键字的具备行,并展现相应的shell

打字与印刷10进制整数,如printf “%dn”, 陆.745结果为陆。

# awk -F: ‘/root/{print $7}’ /etc/passwd /bin/bash

图片 5

那边钦点了action{print $7}

%e, %E

awk内置变量

转变数字为科学(指数)符号,如printf “%四.3en”, 6745结出为陆.745e+03。

awk有诸多置于变量用来设置条件音讯,那个变量能够被退换,上边给出了最常用的片段变量。

图片 6

A奥迪Q3GC 命令行参数个数A汉兰达GV 命令行参数排列ENVIRON
扶助队列中系统情状变量的利用FILENAME awk浏览的公文名FNLX570浏览文件的记录数(已读当前文件的记录数)FS
设置输入域分隔符,等价于命令行 -F选项NF 浏览记录的域的个数N索罗德已读的总记录数OFS 输出域分隔符OWranglerS 输出记录分隔符猎豹CS陆S 调整记录分隔符

%f

其余,$0变量是指整条记录。$一代表近来行的第一个域,$2表示近日行的第二个域,……由此及彼。

以浮点表示法打字与印刷数字,如 printf “%4.三f\n”, 6745结果为6745.0000000

计算/etc/passwd:文件名,每行的行号,每行的列数,对应的完好行内容:

图片 7

#awk -F ‘:’ ‘{print “filename:” FILENAME “,linenumber:” NR “,columns:”
NF “,linecontent:”$0}’
/etc/passwdfilename:/etc/passwd,linenumber:1,columns:7,linecontent:root:x:0:0:root:/root:/bin/bashfilename:/etc/passwd,linenumber:2,columns:7,linecontent:daemon:x:1:1:daemon:/usr/sbin:/bin/shfilename:/etc/passwd,linenumber:3,columns:7,linecontent:bin:x:2:2:bin:/bin:/bin/shfilename:/etc/passwd,linenumber:4,columns:7,linecontent:sys:x:3:3:sys:/dev:/bin/sh

%s

行使printf替代print,能够让代码特别简洁,易读

打字与印刷字符串,如printf “%十s\n”, 67四5结出为13个空格加6745。

awk -F ‘:’
‘{printf(“filename:%10s,linenumber:%s,columns:%s,linecontent:%s\n”,FILENAME,NR,NF,$0)}’
/etc/passwd

图片 8

print和printf

可退换的格式:

awk中而且提供了print和printf两种打字与印刷输出的函数。

N$

内部print函数的参数能够是变量、数值或然字符串。字符串必须用双引号引用,参数用逗号分隔。如若未有逗号,参数就串联在壹块而不可越过区分。这里,逗号的功力与输出文件的分隔符的效劳是同样的,只是后者是空格而已。

职位提示符,可调动字符串的出口地点。printf “%s %s %s\n”, “I”,
“lOVE”,”YOU”输出为:I LOVE YOU,大家调治一下地方,printf “%三$s %贰$s
%壹$s\n”, “YOU”, “LOVE”,”I”,输出结果为:I LOVE YOU

printf函数,其用法和c语言中printf基本相似,能够格式化字符串,输出复杂时,printf越来越好用,代码更易懂。

图片 9

awk编程

 

变量和赋值

修饰符

除此之外awk的放手变量,awk还足以自定义变量。

N: 显示上涨的幅度;

下边计算/etc/passwd的账户人数

-: 左对齐;

awk ‘{count++;print $0;} END{print “user count is “, count}’
/etc/passwdroot:x:0:0:root:/root:/bin/bash……user count is  40

+:右对齐(也能够来得数值符号正负之用);

count是自定义变量。以前的action{}里都以唯有2个print,其实print只是2个口舌,而action{}能够有多个语句,以;号隔开分离。

图片 10

此处未有起始化count,就算暗许是0,不过妥贴的做法照旧始于化为0:

三、方式和操作

awk ‘BEGIN {count=0;print “[start]user count is “, count}
{count=count+1;print $0;} END{print “[end]user count is “, count}’
/etc/passwd[start]user count is
0root:x:0:0:root:/root:/bin/bash…[end]user count is 40

⑴、方式能够是以下任性2个:

总计某些文件夹下的公文占用的字节数

  • /正则表达式/:使用通配符的扩张集。

  • 提到表明式:可以用上面运算符表中的关系运算符举办操作,能够是字符串或数字的可比,如$二>%1选用第3个字段比第2个字段长的行。

  • 形式相称表明式:用运算符~(匹配)和~!(不匹配)。

  • 方式,形式:钦命三个行的限定。该语法不能够包罗BEGIN和END情势。

  • BEGIN:让用户钦赐在首先条输入记录被拍卖从前所产生的动作,平常可在此地设置全局变量。

  • END:让用户在最后一条输入记录被读取之后发出的动作。

ls -l |awk ‘BEGIN {size=0;} {size=size+$5;} END{print “[end]size is “,
size}’
[end]size is  8657198

⑵、操作由壹人或三个指令、函数、表明式组成,之间由换行符或分行隔离,并放在大括号内。主要有4部份:

比如以M为单位呈现:

  • 变量或数组赋值

  • 出口命令

  • 置于函数

  • 决定流命令

ls -l |awk ‘BEGIN {size=0;} {size=size+$5;} END{print “[end]size is “,
size/1024/1024,”M”}’
[end]size is  8.25889 M

4、变量

只顾,计算不包蕴文件夹的子目录。

⑴、awk内置变量之记录变量

条件语句

 

awk中的条件语句是从C语言中借鉴来的,见如下宣示方式:

FS: field separator 读取文件本时,所使用字段分隔符
RS: Record separator 输入文本信息所使用的换行符
OFS: Output Filed Separator 输出字段分隔符(默认值是一个空格)
ORS:Output Row Separator 输出记录分隔符(默认值是一个换行符)

if (expression) {
 statement; statement; … …}if (expression) { statement;} else {
statement2;}if (expression) { statement1;} else if (expression1) {
statement2;} else { statement3;}
总括有个别文件夹下的文本占用的字节数,过滤40玖陆高低的公文(一般都以文本夹):

图片 11

ls -l |awk ‘BEGIN {size=0;print “[start]size is “, size}
{if($5!=4096){size=size+$5;}} END{print “[end]size is “,
size/1024/1024,”M”}’
[end]size is  8.22339 M

注:

循环语句

从$一,$2一贯到$NF,整行用$0标,假使$0被授予新值,全数的$1,$二…和NF都将被再一次总计。同样,若$i被转移,$0将用OFS重新计算。

awk中的循环语句一样借鉴于C语言,辅助while、do/while、for、break、continue,那一个根本字的语义和C语言中的语义完全同样。

⑵、awk内置变量之数据变量

数组

 

因为awk中数组的下标能够是数字和字母,数组的下标日常被誉为关键字(key)。值和重大字都存款和储蓄在中间的一张针对key/value应用hash的表格里。由于hash不是顺序存储,因而在体现数组内容时会开掘,它们并不是依据你预料的依次展现出来的。数组和变量同样,都以在应用时自动创制的,awk也如出一辙会活动推断其积攒的是数字还是字符串。一般来说,awk中的数组用来从记录中搜罗音信,能够用于总括总和、计算单词以及追踪模板被相配的次数等等。

NR: The number of input records awk命令所处理的记录数;如果有多个文件,这个数目会把处理的多个文件中行统一计数
NF:Number of Field 当前记录的field个数
FNR 当前文件的相对记录数
ARGV 数组,保存命令行本身这个字符串,如awk ‘{print $0}’ a.txt b.txt这个命令中,ARGV[0]保存awk,ARGV[1]保存a.txt
ARGC awk命令的参数的个数
FILENAME awk命令所处理的文件的名称
ENVIRON 当前shell环境变量及其值的关联数组

显示/etc/passwd的账户

NR用法

awk -F ‘:’ ‘BEGIN {count=0;} {name[count] = $1;count++;}; END{for (i =
0; i < NR; i++) print i, name[i]}’ /etc/passwd
0 root1 daemon2 bin3 sys4 sync5 games……

图片 12

此地运用for循环遍历数组

NF用法(私下认可以空格分隔)

awk转义类别与算术操作符 
http://www.linuxidc.com/Linux/2015-06/118886.htm

图片 13

AWK简单介绍及选择实例
http://www.linuxidc.com/Linux/2013-12/93519.htm

FNR用法

AWK 简要介绍和例子
http://www.linuxidc.com/Linux/2012-12/75441.htm

图片 14

Shell脚本之AWK文本编辑器语法
http://www.linuxidc.com/Linux/2013-11/92787.htm

ARGV用法

正则表明式中AWK的学习和动用
http://www.linuxidc.com/Linux/2013-10/91892.htm

图片 15

文件数据管理之AWK 图解
http://www.linuxidc.com/Linux/2013-09/89589.htm

之二

如何在Linux中使用awk命令
http://www.linuxidc.com/Linux/2014-10/107542.htm

图片 16

文件分析工具-awk 
http://www.linuxidc.com/Linux/2014-12/110939.htm

FILENAME用法

正文恒久更新链接地址:http://www.linuxidc.com/Linux/2015-12/126217.htm

图片 17

图片 18

ENVIRON用法