PS:剛開始實習,就給了個處理百萬級別數據的任務,之前學過SHELL的一些東西sed/awk之類的處理,可是也沒有具體的應用,只是在10幾行10幾列的小數據操做過,因此要重新學習下,並應用在實際工做中。你能夠用excel編輯還好,保存就卡死你!數組
awk是什麼?與其它大多數UNIX命令不一樣的是,從名字上看,咱們不可能知道awk的功能,由於awk是三我的名的縮寫,他們是:Aho、(Peter)Weinberg和(Brain)Kernighan。正是這三我的創造了awk---一個優秀的樣式掃描與處理工具。函數
awk語言最基本的功能是在文件或字符串中基於指定的規則瀏覽和抽取信息。工具
1.保存awk輸出學習
從myfile文件保存到nwefile文件中,這裏的$0表示全部內容測試
awk '{print $0}' myfile>newfile
2.使用tee,在輸出到文件的同時輸出到屏幕(利用管道'|')spa
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文件時候須要把「,」做爲分隔符excel
awk之因此成爲一種優秀的程序設計語言的緣由之一是它吸取了某些優秀的程序設計語言語言的許多優勢。這些優勢之一就是內置函數的使用,awk定義並支持了一系列的內置函數,因爲這些函數的使用,使得awk提供的功能更爲完善和強大。code
內置字符串函數:
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(條件)