android開發指令碼之awk
引言
這個樣例中,其它的都好懂,就是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 預設按照空格進行分割,並將分隔後的值存入對應的
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 學習
相關文章
- Android開發之指令碼替換PackageNameAndroid指令碼Package
- 指令碼三兄弟 grep、awk、sed指令碼
- awk指令碼學習小結指令碼
- 一個awk if 巢狀 if 的指令碼巢狀指令碼
- 如何把 awk 指令碼移植到 Python指令碼Python
- awk指令碼語言程式設計指南指令碼程式設計
- 進行統計的 awk 指令碼(轉)指令碼
- 測試開發之自動化篇-Appium指令碼開發APP指令碼
- awk命令和指令碼的編寫啟蒙指令碼
- shell指令碼專題-----cat,find,grep,awk,sed(五)指令碼
- ass109.awk指令碼學習使用指令碼
- Android API開發之OpenGL開發之Android OpenGL STL詳解AndroidAPI
- Android開發之HandlerAndroid
- Android開發之TabLayoutAndroidTabLayout
- Android開發之ScrollerAndroid
- Android開發之ExpandableListViewAndroidView
- Android 配置 Ant 指令碼之程式碼混淆和優化Android指令碼優化
- awk基礎05-自定義函式和指令碼函式指令碼
- Android開發採坑篇之騰訊驗證碼Android
- android開發 之 Bolts-AndroidAndroid
- JAVA開發之(二) :配置開啟工程檔案路徑指令碼(MAC版)Java指令碼Mac
- 用現代 js 開發碼良指令碼JS指令碼
- 兩道shell指令碼的程式設計題(sed與awk)指令碼程式設計
- Android開發之View動畫AndroidView動畫
- Android開發之幀動畫Android動畫
- Android安全開發之淺談金鑰硬編碼Android
- Android開發之自動填充簡訊驗證碼Android
- Sed&awk筆記之awk篇:快速瞭解Awk(一)筆記
- 《sed & awk》讀書筆記之 awk 篇筆記
- 為 WebSphere Portal 開發 JACL 管理指令碼Web指令碼
- linux之 awkLinux
- linux之awkLinux
- 幫助你排序文字檔案的 Awk 命令列或指令碼排序命令列指令碼
- Android開發入門之熟悉開發環境Android開發環境
- Android開發之常用佈局Android
- Android JNI開發系列之配置Android
- android 開發之 APT 技術AndroidAPT
- Android開發之屬性動畫Android動畫