標籤:Regex awk
【著作權聲明:轉載請保留出處:blog.csdn.net/gentleliu。Mail:shallnew at 163 dot com】
這一節來見識一下a w k許多強大的字串函數及其使用方法。
1、 sub 和 gsub函數:
用法:sub( Ere, Repl, [ str ] )
gsub( Ere, Repl, [ str ] )
在第三個參數給出字串中尋找滿足Ere 參數指定的擴充Regex的字串,並使用第二個參數替換之。如果未指定 In 參數,預設值是整個記錄($0 記錄變數)。Sub函數替換第一個符合模式的字串,gsub會替換所有符合模式的字串。
# awk 'BEGIN{buf="Hello,awk! there is awktutorial!";sub(/awk/, "world", buf); print buf}'Hello,world! there is awk tutorial!# echo "Hello,awk! there is awk tutorial" | awk'{sub(/awk/, "world"); print $0}'Hello,world! there is awk tutorial# awk 'BEGIN{buf="Hello,awk! there is awktutorial!";gsub(/awk/, "world", buf); print buf}'Hello,world! there is world tutorial!# echo "Hello,awk! there is awk tutorial" | awk'{gsub(/awk/, "world"); print $0}'Hello,world! there is world tutorial#
2、 index函數
index( String1, String2 );
在第一個參數string1中尋找字串string2,返回首次出現的位置。
# echo "Hello,awk! there is awk tutorial" | awk '{printindex($0, "awk")}'7#
3、 length函數,blength函數
length[(String)];返回參數指定字串的長度,以字元為單位,如果未給出 String 參數,則返回整個記錄的長度($0記錄變數)。
# echo"Hello,awk! there is awk tutorial" | awk '{print length()}'32#
4、 substr函數
substr( String,M, [ N ] );返回從字串string從第M位置開始,之後的N個字元的字串。M 參數指定為將 String 參數中的第一個字元作為編號 1。如果未指定 N 參數,則子串的長度將是 M 參數指定的位置到 String 參數的末尾的長度。
# echo"Hello,awk! there is awk tutorial" | awk '{print substr($0, 5)}'o,awk! there isawk tutorial# echo"Hello,awk! there is awk tutorial" | awk '{print substr($0, 5, 6)}'o,awk!#
5、 spilt函數
split( String,A, [Ere] );將 String 參數指定的參數分割為數組元素 A[1], A[2], . . ., A[n],並返回 n 變數的值。此分隔可以通過 Ere 參數指定的擴充Regex進行,或用當前欄位分隔符號(FS 特殊變數)來進行(如果沒有給出 Ere 參數)。除非上下文指明特定的元素還應具有一個數字值,否則 A 數組中的元素用字串值來建立。
# echo"Hello,awk! there is awk tutorial" | awk '{split($0, arr); for (i inarr){print i,arr[i]}}'4 awk5 tutorial1 Hello,awk!2 there3 is
awk for …in 迴圈,是一個無序的迴圈。並不是從數組下標1…n ,因此使用時候需要注意。
6、 system函數
system(cmd);執行cmd 參數指定的命令,並返回退出狀態。
# awk 'BEGIN{system("echo $HOME")}'/root
原來awk裡面還可以調用shell 命令,高大上啊。
Awk系列文章就講這麼多,awk在文本處理方面相當出色,功能也很強大,掌握awk本系列已經可以做很多事情了,下一節將開始講述sed命令。
shell文本過濾編程(八):awk之內建函數