android开发脚本之awk

来源:互联网 发布:巨人网络借壳大东南 编辑:程序博客网 时间:2024/05/17 06:31

这里写图片描述

引言

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 默认按照空格进行分割,并将分隔后的值存入对应的 n41, 23, 4(0) 代表整行。其中 $NF 代表最后一个字段

awk '{print $1, $2} ' ps.txtroot 10570root 10659root 10737root 10782root 10783root 10815root 10850root 10930shell 10945
awk '{print $1, $NF} ' ps.txtroot kworker/u16:0root kworker/4:0root kworker/6:1shell 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 NAMEroot /t 10783 /t 2 /t kworker/5:0root /t 10815 /t 2 /t kworker/u16:0root /t 10850 /t 2 /t kworker/4:0root /t 10930 /t 2 /t kworker/6:1shell /t 10945 /t 655 /t ps-----------end------

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

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

7.Awk打印USER 为system的进程

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

awk '$1 ~/system/' ps.txtsystem    4542  683   1434148 32520 SyS_epoll_ 0000000000 S com.qualcomm.qti.notificationservicesystem    4917  683   1436844 34788 SyS_epoll_ 0000000000 S org.simalliance.openmobileapi.service:remotesystem    4928  683   1435396 33368 SyS_epoll_ 0000000000 S com.qualcomm.displaysystem    10546 683   1464360 36076 SyS_epoll_ 0000000000 S com.android.settingssystem    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命令详解

0 0
原创粉丝点击