AWK文本處理工具(Linux)
PS:剛開始實習,就給了個處理百萬級別數據的任務,以前學過SHELL的一些東西sed/awk之類的處理,但是也沒有具體的應用,只是在10幾行10幾列的小數據操作過,所以要從新學習下,並應用在實際工作中。你可以用excel編輯還好,保存就卡死你!
什么是AWK
awk是什么?與其它大多數UNIX命令不同的是,從名字上看,我們不可能知道awk的功能,因為awk是三個人名的縮寫,他們是:Aho、(Peter)Weinberg和(Brain)Kernighan。正是這三個人創造了awk---一個優秀的樣式掃描與處理工具。
AWK使用方法
awk語言最基本的功能是在文件或字符串中基於指定的規則瀏覽和抽取信息。
有三種方式可調用awk:
- 命令行方式
- 將所有的awk命令插入一個文件,並利用chmod使awk文件成為執行 -f scripts.awk
- 將所有的awk命令插入一個單獨文件,然后調用 #!/bin/awk -f
具體的使用方法
1.保存awk輸出
從myfile文件保存到nwefile文件中,這里的$0表示所有內容
awk '{print $0}' myfile>newfile
2.使用tee,在輸出到文件的同時輸出到屏幕(利用管道'|')
awk '{print $0}' myfile |tee newfile
3.awk 一般的語法形式
awk [-Field-separator] 'commands' input-file(s) awk -f awk-script-file input-file
4.awk腳本的一般形式
#awk-script-file.awk BEGIN {FS=","} { print $1 } END {print "FINISH"}
其中,FS與命令行的-F是同樣的,用來設定分隔符,在處理SCV文件時候需要把“,”作為分隔符
AWK內置函數
awk之所以成為一種優秀的程序設計語言的原因之一是它吸收了某些優秀的程序設計語言語言的許多優點。這些優點之一就是內置函數的使用,awk定義並支持了一系列的內置函數,由於這些函數的使用,使得awk提供的功能更為完善和強大。
內置字符串函數:
gsub(r,s) 在整個$0中用s替代r awk 'gsub(/name/,"xingming") {print $0}' temp gsub(r,s,t) 在整個t中用s替代r index(s,t) 返回s中字符串t的第一位置,失敗返回0 awk 'BEGIN {print index("Sunny","ny")}' temp 返回4 length(s) 返回s的長度 match(s,r) 測試s是否包含匹配r的字符串,失敗返回0 也可以使用~/xxx/ awk '$1=="J.Lulu" {print match($1,"u")}' temp 返回4 split(s,a,fs) 在fs上將s分成序列a awk 'BEGIN {print split("12#345#6789",myarray,"#")"' 返回3,同時myarray[1]="12", myarray[2]="345", myarray[3]="6789" sprint(fmt,exp) 返回經fmt格式化后的exp sub(r,s) 從$0中最左邊最長的子串中用s代替r(只更換第一遇到的匹配字符串) substr(s,p) 返回字符串s中從p開始的后綴部分 substr(s,p,n) 返回字符串s中從p開始長度為n的后綴部分
2.awk中自定義語句
1.支持if判斷
if(表達式) {語句1} else if(表達式) {語句2} else {語句3}
2.支持for循環
for(變量 in 數組) {語句}
for(變量;條件;表達式) {語句}
3.支持while循環
while(表達式) {語句}
do {語句}while(條件)