AWK高階之內部函式使用
點選(此處)摺疊或開啟
-
函式 說明 例句說明
-
gsub( Ere, Repl, [ In ] ) 全域性替換,除了正規表示式所有具體值被替代這點,它和sub 函式完全一樣地執行,。 例句:gsub(/[0-9]+/,"!",info)
-
sub( Ere, Repl, [ In ] )
-
gensub(Ere, Repl, h, [In]) sub:第一次出現的替換,用 Repl 引數指定的字串替換 In 引數指定的字串中的由 Ere 引數指定的擴充套件正規表示式的第一個具體值。sub 函式返回替換的字元數量。出現在 Repl引數指定的字串中的 &(和符號)由 In 引數指定的與Ere 引數的指定的擴充套件正規表示式匹配的字串替換。如果未指定 In 引數,預設值是整個記錄($0 記錄變數)。
-
gensub:類似於sub,但是h引數可以控制替換的位置,g/G全域性替換,h為數字表示替換第幾次出現的位置,具體檢視man awk 說明:這時可以用正規表示式,但在awk中的匹配都是用//引起來的,比如/;$/ 以分號結尾,/^#/以#開頭;
-
更新通配出來的字元,用\(..\) 或者 &;
-
還可以統計每一行字元出現的次數;
-
index( String1, String2 ) 在由 String1 引數指定的字串(其中有出現 String2 指定的引數)中,返回位置,從 1 開始編號。如果 String2引數不在 String1 引數中出現,則返回 0(零)。 略
-
length [(String)] 返回 String 引數指定的字串的長度(字元形式)。如果未給出 String 引數,則返回整個記錄的長度($0 記錄變數)。 略
-
blength [(String)] 返回 String 引數指定的字串的長度(以位元組為單位)。如果未給出 String 引數,則返回整個記錄的長度($0 記錄變數)。 略
-
substr( String, M, [ N ] ) 返回具有 N 引數指定的字元數量子串。子串從 String 引數指定的字串取得,其字元以 M 引數指定的位置開始。M引數指定為將 String 引數中的第一個字元作為編號 1。如果未指定 N 引數,則子串的長度將是 M 引數指定的位置到String 引數的末尾 的長度。 substr(a,4,10)
-
match( String, Ere )
-
可以使用'~'
-
$0 ~ /partern/ 在 String 引數指定的字串(Ere 引數指定的擴充套件正規表示式出現在其中)中返回位置(字元形式),從 1 開始編號,或如果 Ere 引數不出現,則返回 0(零)。RSTART特殊變數設定為返回值。RLENGTH 特殊變數設定為匹配的字串的長度,或如果未找到任何匹配,則設定為 -1(負一)。 if (match($0,/31/)
-
split( String, A, [Ere] ) 將 String 引數指定的引數分割為陣列元素 A[1], A[2], . . ., A[n],並返回 n 變數的值。此分隔可以通過 Ere 引數指定的擴充套件正規表示式進行,或用當前欄位分隔符(FS 特殊變數)來進行(如果沒有給出 Ere 引數)。除非上下文指明特定的元素還應具有一個數字值,否則 A 陣列中的元素用字串值來建立。 awk 'BEGIN{info="this is a test";split(info,tA," ");print length(tA);for(k in tA){print k,tA[k];}}'
-
tolower( String ) 返回 String 引數指定的字串,字串中每個大寫字元將更改為小寫。大寫和小寫的對映由當前語言環境的LC_CTYPE 範疇定義。 略
-
toupper( String ) 返回 String 引數指定的字串,字串中每個小寫字元將更改為大寫。大寫和小寫的對映由當前語言環境的LC_CTYPE 範疇定義。 略
-
sprintf(Format, Expr, Expr, . . . ) 根據 Format 引數指定的 printf 子例程格式字串來格式化 Expr 引數指定的表示式並返回最後生成的字串。 詳見下面的表格
-
-
下面著重講sub的修改字串與統計字串以及split功能
-
-
1、gsub求每行出現數字1的次數
-
-
awk '{a+=gsub(/1/,"&");print a;a=0}' cs.txt
-
---gsub的特性每匹配成功一個就返回1,所以就可以累加了;這裡不能用sub,因為sub只匹配第一個;
-
---也不能用match函式,因為他返回位置並且找到1個就可以了,因為match的目的是找到要匹配的行,而非是字元
-
-
2、gsub修改字串
-
[root@wmsvmpc ~]# cat cs.txt
-
PBCSPOFT0101 96
-
PBCSPOFT0102 6
-
PBCSPOFT0103 8
-
PBCSPOFT0104 0
-
PBCSPOFT0105 0
-
PBCSPOFT0106 0
-
-
[root@wmsvmpc ~]# awk '{a=gensub(/PBCSPOFT([0-9]+).*/,"\\1",1);print a}' cs.txt --gensub不能改變awk中已經定義的$0,$1-$n的值,所以得重定義
-
0101
-
0102
-
0103
-
0104
-
0105
-
0106
-
----gensub使用()的方式來儲存變數值,用\\1的方式引用變數值,而gsub用&來引用變數值
-
[root@wmsvmpc ~]# awk '{gsub(/([0-9]+)/,"#&");print}' cs.txt ---gsub只能替換所有的
-
PBCSPOFT#0101 #96
-
PBCSPOFT#0102 #6
-
PBCSPOFT#0103 #8
-
PBCSPOFT#0104 #0
-
PBCSPOFT#0105 #0
-
PBCSPOFT#0106 #0
-
-
[root@wmsvmpc ~]# awk '{a=gsub(/([0-9]+)/,"&");print a}' cs.txt ---gsub返回的是成功的個數,所以無法單獨提取匹配的數字
-
2
-
2
-
2
-
2
-
2
-
-
-
3、split分割成陣列
-
分割info,動態建立陣列tA,這裡比較有意思,awk for …in 迴圈,是一個無序的迴圈。 並不是從陣列下標1…n ,因此使用時候需要注意。
-
使用split返回字串陣列元素個數。工作方式如下:如果有一字串,包含一指定分隔符-,例如AD2-KP9-JU2-LP-1,將之劃分成一個陣列。使用split,指定分隔符及陣列名。此例中,命令格式為("AD2-KP9-JU2-LP-1",parts_array,"-"),split然後返回陣列下標數,這裡結果為4。還有一個例子使用不同的分隔符。
-
-
[root@wmsvmpc ~]# awk 'BEGIN {print split("123#456#678", myarray, "#")}'
-
3
-
[root@wmsvmpc ~]# awk 'BEGIN{{print split("123#456#678", myarray, "#")}{for (i in myarray) print i,myarray[i]}}' ---可以看出來split返回的是元素的個數
-
3
-
1 123
-
2 456
-
3 678
-
-
SPRINTF 格式化字串輸出 (sprintf有一個秒用,當變數後面不跟\n時列印的字串都在一行的,所以就能快速實現拼接)
-
其中格式化字串包括兩部分內容: 一部分是正常字元, 這些字元將按原樣輸出; 另一部分是格式化規定字元,以"%"開始, 後跟一個或幾個規定字元,用來確定輸出內容格式。
-
-
-
格式符 說明
-
%d 十進位制有符號整數
-
%u 十進位制無符號整數
-
%f 浮點數
-
%s 字串
-
%c 單個字元
-
%p 指標的值
-
%e 指數形式的浮點數
-
%x %X 無符號以十六進位制表示的整數
-
%o 無符號以八進位制表示的整數
-
%g 自動選擇合適的表示法
-
[chengmo@centos5 ~]$ awk 'BEGIN{n1=124.113;n2=-1.224;n3=1.2345; printf("%.2f,%.2u,%.2g,%X,%o\n",n1,n2,n3,n1,n1);}'
- 124.11,18446744073709551615,1.2,7C,174
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25960404/viewspace-1818872/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- awk內建函式函式
- 高階函式的使用函式
- python高階內建函式Python函式
- python高階之函式Python函式
- 《前端之路》之 JavaScript 高階技巧、高階函式(一)前端JavaScript函式
- Kotlin——高階篇(二):高階函式詳解與標準的高階函式使用Kotlin函式
- Python5個內建高階函式的使用Python函式
- 高階函式函式
- Python內部函式zip使用Python函式
- 從高階函式--->高階元件函式元件
- Python 函式進階-高階函式Python函式
- Kotlin進階(二)中綴、內聯、高階函式Kotlin函式
- oracle 高階函式Oracle函式
- Javascript 高階函式JavaScript函式
- 函式高階玩法函式
- awk基礎04-內建函式函式
- Python中函式的高階使用Python函式
- underscore 系列之內部函式 cb 和 optimizeCb函式
- AWK高階應用
- 理解Swift高階函式之map, filter, reduceSwift函式Filter
- Kotlin 函式6 - 高階函式Kotlin函式
- 【轉】linux下awk內建函式的使用(split/substr/length)Linux函式
- 如何在函式內部定義函式?函式
- shell高階-----建立函式函式
- javaScript高階級函式JavaScript函式
- python高階函式Python函式
- Kotlin高階函式Kotlin函式
- 如何理解高階函式函式
- Python 高階函式Python函式
- Scala的高階函式函式
- JS高階函式-函式柯里化JS函式
- 設計模式基礎 之 4 高階函式設計模式函式
- awk之隨機函式rand()和srand()隨機函式
- Haskell學習-高階函式Haskell函式
- python- 函式高階Python函式
- 高階函式簡述 js函式JS
- Javscript 高階函式(上)函式
- JS學習理解之閉包和高階函式JS函式