码迷,mamicode.com
首页 > 系统相关 > 详细

linux命令之awk

时间:2018-05-20 14:13:25      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:统计   表达式   程序设计   star   抽取信息   $0   tar   字符串   amp   

简介 

  awk命令的名称是取自三位创始人Alfred Aho 、Peter Weinberger 和 Brian Kernighan姓名的首字母,awk有自己的程序设计语言,设计简短的程序,读入文件,数据排序,处理数据,生成报表等功能。

     awk 通常用于文本处理和报表生成,最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。

     awk 通常以文件的一行为处理单位的,awk每接收文件的一行,然后执行相应的命令,来处理文本,完整的awk脚本通常用来格式化文本文件中的信息

使用方式

            awk ‘{pattern + action}‘ {filenames}

                  pattern 表示 AWK 在数据中查找的内容,正则表达式,用斜杠括起来

                  action 是在找到匹配内容时所执行的一系列命令

                  花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组

使用说明

     

[hebinbin@iZ25y8wtfbqZ ~]$ awk {print $0} /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

      依次对/etc/passwd 中的每一行执行 print 命令,所有输出都发送到 stdout,所得到的结果与执行 cat /etc/passwd 完全相同

     $0 $n表示

                             技术分享图片

 

 

 

 

 -F参数:指定分隔符,可指定一个或多个

root@iZ25me8kko3Z:~# awk -F "/" -F ":" { print $1 " " $9 " " $0 } /etc/passwd
root  root:x:0:0:root:/root:/bin/bash
daemon  daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin  bin:x:2:2:bin:/bin:/bin/sh
sys  sys:x:3:3:sys:/dev:/bin/sh

 

只查看test.txt文件20-30行内容

root@iZ25me8kko3Z:~# awk {if(NR>=20 && NR<=30) print $1} test.txt
sock.close()
print(%s
break
elif
data
data
#print(data)
#print(clients)
#if
if
print(data)

 

BEGIN 和 END 模块

    awk 在开始处理输入文件之前会执行 BEGIN 块,处理了输入文件中的所有行之后执行END块

 

统计/etc/passwd的账户人数

root@iZ25me8kko3Z:~# awk {count++;print $0;} END{print "user count is ",count} /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
.................
user count is  47

count是自定义变量,没有初始化默认是0,action{}中的多个语句用 ;隔开

root@iZ25me8kko3Z:~# 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  0
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
.....................
[end] user count is  47

 

统计某个文件夹下的文件占用的字节数

root@iZ25me8kko3Z:~# ll |awk BEGIN {size=0;} {size=size+$5;} END{print "[end]size is ",size}
[end]size is  3090190

 

awk运算符

技术分享图片

 

 

root@iZ25me8kko3Z:~# awk BEGIN{a=5;a+=5;print a}
10

  root@iZ25me8kko3Z:~# awk ‘BEGIN{a=1;b=2;print (a>2&&b>1,a=1||b>1)}‘
  0 1

root@iZ25me8kko3Z:~# awk BEGIN{a=1;b=2;print (a>2&&b>1,a=1||b>1)}
0 1
root@iZ25me8kko3Z:~# awk BEGIN{a="100testaa";if(a~/100/) {print "ok"}}
ok
root@iZ25me8kko3Z:~# echo|awk BEGIN{a="100testaaa"}a~/test/{print "ok"}
ok
root@iZ25me8kko3Z:~# awk BEGIN{a=11;if(a>=9){print "ok"}}
ok
root@iZ25me8kko3Z:~# awk BEGIN{a;if(a>=b){print "ok"}}
ok
root@
root@iZ25me8kko3Z:~# awk BEGIN{a="b";print a=="b"?"ok":"err"}
ok
root@iZ25me8kko3Z:~# awk BEGIN{a="b";print a=="c"?"ok":"err"}
err

 

 

awk内置变量

技术分享图片

 

 

 

 

                

 

linux命令之awk

标签:统计   表达式   程序设计   star   抽取信息   $0   tar   字符串   amp   

原文地址:https://www.cnblogs.com/hellohell/p/9063044.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!