一,什麼是awkawk是linux下的乙個命令,他對其他命令的輸出,對檔案的處理都十分強大,其實他 更像一門程式語言,他可以自定義變數,有條件語句,有迴圈,有陣列,有正則,有函式等。他讀取輸出,或者檔案的方式是一行,一行的讀,根據你給出的條件進 行查詢,並在找出來的行中進行操作,感覺他的設計思想,真的很簡單,但是結合實際情況,具體操作起來就沒有那麼簡單了。他有三種形 勢,awk,gawk,nawk,平時所說的awk其實就是gawk。
二,awk中的記錄,域,分割符
當我們讀取輸出時,或者讀取檔案時,讀取一行就是乙個記錄。記錄分割符是預設是回車符,儲存在rs,ors中。
我們從記錄中分割出我們要單詞,或者是片語等,我們稱他為域,域分割符,預設的是空格和tab銉,儲存在內建變
量ors中。舉個例子:
aaaa:bbbb:ccccccc
1111:2343:5t43343
上面有二行,這二行就是二個記錄,每行後面的回車呢,就是記錄分割符,裡面冒號呢,就是域分割符,分割出來的,aaaa,1111這類東西就是域了。
awk -f: '' testfile
三,awk的內建變數和運算子
1,變數
變 量描述
$n當前記錄的第n個字段,欄位間由 fs分隔。
$0完整的輸入記錄。
argc
命 令行引數的數目。
argind
命令列中當前檔案的位置(從0開始算)。
argv
包 含命令列引數的陣列。
convfmt
數字轉換格式(預設值為%.6g)
environ
環 境變數關聯陣列。
errno
最後乙個系統錯誤的描述。
fieldwidths
字 段寬度列表(用空格鍵分隔)。
filename
當前檔名。
fnr同 nr,但相對於當前檔案。
fs欄位分隔符(預設是任何空格)。
ignorecase
如 果為真,則進行忽略大小寫的匹配。
nf當前記錄中的字段數。
nr當 前記錄數。
ofmt
數字的輸出格式(預設值是%.6g)。
ofs輸 出欄位分隔符(預設值是乙個空格)。
ors輸出記錄分隔符(預設值是乙個換行符)。
rlength
由 match函式所匹配的字串的長度。
rs記錄分隔符(預設是乙個換行符)。
rstart
由 match函式所匹配的字串的第乙個位置。
subsep
陣列下標分隔符(預設值是\034)。
2,運算子
運算子描述= += -= *= /= %= ^= **=
賦值?:
c條件表示式
||邏 輯或
&&邏輯與
~ ~!
匹 配正規表示式和不匹配正規表示式
< <= > >= != ==
關 系運算子
空格連線
+ -加,減
* / &
乘,除與求餘
+ - !
一元加,減和邏輯非
^ ***
求冪++ --
增加或減少,作為字首或字尾
$字 段引用
in陣列成員
四,awk的正則
匹配符描述\y
匹配乙個單詞開頭或者末尾的空字串
\b匹配單詞內的空字串
\<
匹配乙個單詞的開頭的空字串,錨定開始
\>
匹配乙個單詞的末尾的空字串,錨定末尾
\w匹配乙個非字母數字組成的單詞
\w匹配乙個字母數字組成的單詞
\'匹配字串末尾的乙個空字串
\『匹配字串開頭的乙個空字串
五,awk的函式
1,字串函式
函式名描述sub
匹配記錄中最大、最靠左邊的子字串的正規表示式,並用替換字串替換這些字串。如果沒有指定目標字串就預設使用整個記錄。替換只發生在第一次匹配的 時候
gsub
整個文件中進行匹配
index
返回子字串第一次被匹配的位置,偏移量從位置1開始
substr
返回從位置1開始的子字串,如果指定長度超過實際長度,就返回整個字串
split
可按給定的分隔符把字串分割為乙個陣列。如果分隔符沒提供,則按當前fs值進行分割
length
返回記錄的字元數
match
返回在字串中正規表示式位置的索引,如果找不到指定的正規表示式則返回0。match函式會設定內建變數rstart為字串中子字串的開始位 置,rlength為到子字串末尾的字元個數。substr可利於這些變數來擷取字串
toupper和tolower
可用於字串大小間的轉換,該功能只在gawk中有效
2,數學函式
函式名返回值atan2(x,y)
y,x 範圍內的餘切
cos(x)
余弦函式
exp(x)
求 冪int(x)
取整log(x)
自然對 數
rand()
隨機數sin(x)
正弦sqrt(x)
平 方根
srand(x)
x是rand()函式的種子
int(x)
取 整,過程沒有捨入
rand()
產生乙個大於等於0而小於1的隨機數
六,例項
學習awk的時候,做了乙個例子,學東西,不要光看,光看是記不住東西的。光看的話,也許你知道怎麼回事,真正實際操作,不是這兒有問題,就是那兒有問題。所以一定要動手親自操作一下。
1,測試檔案test
例1:
cat test | awk -f: 'else if($1 == "bin")else \}'
例2:
awk '}}'例4:
ls -al /home/zhangy/mytest | awk 'begin例5:}'
echo "32:34" |awk -f: '\例6:function max(one,two)else
}'
#awk 'begin$1 ~nameend' test例7:#awk '' test
#awk ';print}' test
#awk ';print}' test
#awk -f: '' test
#awk -f: '' test
awk -f: '' test
cat test |awk -f: '\nf != 7\
$1 !~ /^[a-za-z0-9]/\
$2 == "*" '
awk是命令還是程式語言
一,什麼是awk awk是linux下的乙個命令,他對其他命令的輸出,對檔案的處理都十分強大,其實他更像一門程式語言,他可以自定義變數,有條件語句,有迴圈,有陣列,有正則,有函式等。他讀取輸出,或者檔案的方式是一行,一行的讀,根據你給出的條件進行查詢,並在找出來的行中進行操作,感覺他的設計思想,真的...
shell程式設計之awk命令詳解
shell程式設計之awk命令詳解 linux 本篇部落格主要介紹linux常用命令中的對文字和資料進行處理的命令awk的用法。awk命令 awk是一種程式語言,用於在linux unix下對文字和資料進行處理。資料可以來自標準輸入 stdin 乙個或多個檔案,或其它命令的輸出。它支援使用者自定義函...
什麼是程式語言
什麼是程式語言?學習程式語言之前,首先要搞清楚 程式語言 這個概念。很小的時候,父母就教我們開口說話,也教我們如何理解別人講話的意思。經過長時間的薰陶和自我學習,我們竟然在不知不覺中學會了說話,同時也能聽懂其他小朋友說話的意思了,我們開始向父母要零花錢買零食和玩具 被欺負了向父母傾訴 我們說的是漢語...