android开发脚本之awk

这里写图片描述

引言

android开发脚本之过滤特定包名的log

这个样例中,其它的都好懂,就是awk,可能如果没有接触过,就是有点不明白是怎么回事,下面简单的讲讲awk

简介

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

使用方法

awk '{pattern + action}' {filenames}

尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 pattern就是要表示的正则表达式,用斜杠括起来。

awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用来格式化文本文件中的信息。

通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。

调用awk

有三种方式调用awk

命令行方式

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.查看进程的信息

adb shell ps > ps.txt

查看ps.txt

cat ps.txt

2.Awk 的默认行为

默认的时候awk 打印文件中的每一行

awk '{print;}' ps.txt

3. Awk打印匹配的行

android@tesdt-Precision-T1700:~/Desktop$ awk '/com.android.phone/' ps.txt 
radio     2369  683   1510652 83040 SyS_epoll_ 0000000000 S com.android.phone

4.Awk仅打印指定的域

Awk包含许多内建的变量,对于每行的记录, Awk 默认按照空格进行分割,并将分隔后的值存入对应的 n4 1, 2 3, 4( 0) 代表整行。其中 $NF 代表最后一个字段

awk '{print $1, $2} ' ps.txt
root 10570
root 10659
root 10737
root 10782
root 10783
root 10815
root 10850
root 10930
shell 10945
awk '{print $1, $NF} ' ps.txt
root kworker/u16:0
root kworker/4:0
root kworker/6:1
shell ps

5.Awk开始和最后的动作

Awk包含两个重要的关键字 BEGIN 和 END

BEGIN { Actions}    
{ACTION} # Action for everyline in a file    
END { Actions }    

在BEGIN 节中的 Actions 会在读取文件中的行之前被执行。
而END 节中的 Actions 会在读取并处理文件中的所有行后被执行。

awk 'BEGIN {print "-------start--";}
{print $1,"/t", $2,"/t", $3,"/t",$NF;}
END{print "-----------end------";
} ' ps.txt

-------start--
USER /t PID /t PPID /t NAME
root /t 10783 /t 2 /t kworker/5:0
root /t 10815 /t 2 /t kworker/u16:0
root /t 10850 /t 2 /t kworker/4:0
root /t 10930 /t 2 /t kworker/6:1
shell /t 10945 /t 655 /t ps
-----------end------

6.Awk找出员工 PID 大于 1000 的进度信息

awk '$2 > 10800' ps.txt 
USER      PID   PPID  VSIZE  RSS   WCHAN              PC  NAME
root      10815 2     0      0     worker_thr 0000000000 S kworker/u16:0
root      10850 2     0      0     worker_thr 0000000000 S kworker/4:0
root      10930 2     0      0     worker_thr 0000000000 S kworker/6:1
shell     10945 655   3788   1068           0 7f997f26ac R ps

7.Awk打印USER 为system的进程

$1代表USER,如果等于system则打印出整行

awk '$1 ~/system/' ps.txt
system    4542  683   1434148 32520 SyS_epoll_ 0000000000 S com.qualcomm.qti.notificationservice
system    4917  683   1436844 34788 SyS_epoll_ 0000000000 S org.simalliance.openmobileapi.service:remote
system    4928  683   1435396 33368 SyS_epoll_ 0000000000 S com.qualcomm.display
system    10546 683   1464360 36076 SyS_epoll_ 0000000000 S com.android.settings
system    10558 683   1457292 34904 SyS_epoll_ 0000000000 S com.qualcomm.qti.ext 

~操作符是和正则表达式中的值进行比较,如果匹配则打印整行

参考资料

1.http://blog.csdn.net/andyxm/article/details/5964071
awk print 学习

2.http://cache.baiducontent.com/c?m=9d78d513d99004f64caad420024c91205b43811021ca95503ac3933fc2380b1f1a33a2ac275541598cd8293259e81806bdac636f644371edc08cdf57ddb99129328a2429731d9b4118d413a9ce4432c157ca1cb6f1&p=cb72c54ad5c340f34ebe9b7c554485&newp=8b2a9702909819f100bd9b7d0d17c6231610db2151d4d5166b82c825d7331b001c3bbfb423221b02d7c4766501a44d5ee0fa3075360021a3dda5c91d9fb4c57479cf616f2842de&user=baidu&fm=sc&query=awk&qid=822412cc0003b0ee&p1=1
linux awk命令详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hfreeman2008

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值