linux awk

来源:互联网 发布:单片机是嵌入式处理器 编辑:程序博客网 时间:2024/05/22 12:07

参考文章:http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html

1.命令行方式awk [-F  field-separator]  'commands'  input-file(s)其中,commands 是真正awk命令,[-F域分隔符]是可选的。 input-file(s) 是待处理的文件。在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。2.shell脚本方式将所有的awk命令插入一个文件,并使awk程序可执行,然后awk命令解释器作为脚本的首行,一遍通过键入脚本名称来调用。相当于shell脚本首行的:#!/bin/sh可以换成:#!/bin/awk3.将所有的awk命令插入一个单独文件,然后调用:awk -f awk-script-file input-file(s)其中,-f选项加载awk-script-file中的awk脚本,input-file(s)跟上面的是一样的。


print换行打印,printf不换行打印

print和printfawk中同时提供了print和printf两种打印输出的函数。其中print函数的参数可以是变量、数值或者字符串。字符串必须用双引号引用,参数用逗号分隔。如果没有逗号,参数就串联在一起而无法区分。这里,逗号的作用与输出文件的分隔符的作用是一样的,只是后者是空格而已。printf函数,其用法和c语言中printf基本相似,可以格式化字符串,输出复杂时,printf更加好用,代码更易懂。



1.查找对应的用户的username与bash内容

使用cut指令:

[root@localhost samlai]# cat /etc/passwd | cut -d ":" -f 1,7

使用awk指令:

[root@localhost samlai]# cat /etc/passwd | awk -F ':' '{print $1,$7}'


编程:

2.添加user总数内容,并打印user名称:

[root@localhost samlai]# awk -F ":" '{count++;print$1;} END {print "Users Total is:",count}' /etc/passwdrootbindaemonadmlpsyncshutdownhaltmailuucpoperatorgamesgopherftpnobodydbususbmuxdavahi-autoipdvcsartkitntpavahipulseabrtsaslauthpostfixhaldaemonapachegdmsshdtcpdumpsamlaiUsers Total is: 32

3.算出当前文件文件大小:

[root@localhost samlai]# ls -l | awk 'BEGIN {size=0;} {size=size=$5} END{print "[end]size is",size/1024/1024,"M"}'[end]size is 0.00390625 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/passwd0 root1 daemon2 bin3 sys4 sync5 games......
复制代码

这里使用for循环遍历数组

 

awk编程的内容极多,这里只罗列简单常用的用法,更多请参考 http://www.gnu.org/software/gawk/manual/gawk.html



0 0