**awk內建函式小節**
awk內建字串函式
gsub(r,s) 在整個$0中用s替代r
gsub(r,s,t) 在整個t中用s替代r
index(s,t) 返回s中字串t的第一位置
length(s) 返回s長度
match(s,r) 測試s是否包含匹配r的字串
split(s,a,fs) 在fs上將s分成序列a
sprint(fmt,exp) 返回經fmt格式化後的exp
sub(r,s) 用$0中最左邊最長的子串代替s ,該字串是r
substr(s,p) 返回字串s中從p開始的字尾部分
substr(s,p,n) 返回字串s中從p開始長度為n的字尾部分
詳細說明一下各個函式的使用方法。
gsub函式有點類似於sed查詢和替換。它允許替換一個字串或字元為另一個字串或字元,並以正則表示式的
形式執行。第一個函式作用於記錄$0,第二個gsub函式允許指定目標,然而,如果未指定目標,預設為$0。
index(s,t)函式返回目標字串s中查詢字串t的首位置。length函式返回字串s字元長度。match函式測試字
符串s是否包含一個正則表示式r定義的匹配。split使用域分隔符fs將字串s劃分為指定序列a。sprint函式類
似於printf函式(以後涉及),返回基本輸出格式fmt的 結果字串exp。sub(r,s)函式將用s替代$0中最左邊最長
的子串,該子串被(r)匹配。 substr(s,p)返回字串s在位置p後的字尾。substr(s,p,n)是輸出字串s,從第p
個字元到第n個字元。現在看一看awk中這些字串函式的功能。
1.gsub要在整個記錄中替換一個字串為另一個,使用正則表示式格式,/目標模式/
4842到4899:
$ awk 'gsub(/4842/, 4899) {print $0}' grade.txt
J.Troll 07/99 4899 Brown-3 12 26 26
2.index
查詢字串s中t出現的第一位置。必須用雙引號將字串括起來。例如返回目標字串 Bunny中ny出現的第一位
置,即字元個數。
$ awk 'BEGIN {print index("Bunny","ny")} grade.txt
4
3.length
返回所需字串長度,例如檢驗字串J.Troll返回名字及其長度,即人名構成的字元個數。
$ awk '$1=="J.Troll" {print length($1) " " $1}' grade.txt
7 J.Troll
這個還可以這樣寫:
echo "J.Troll 07/99 4824 Brown-3 12 26 26 "| awk '{if ($1~"J.Troll") print length($1), $1}'
也就是awk ' {if ($1~"J.Troll") print length($1) " " $1}' grade.txt
還有一種方法,這裡字串加雙引號。$ awk 'BEGIN {print length("A FEW GOOD MEN")}'【BEGIN/END:指定開始和結束規則】
14
4.match
match測試目標字串是否包含查詢字元的一部分。可以對查詢部分使用正則表示式,返回值為成功出現的字元排
列數。如果未找到,返回0,第一個例子在ANCD中查詢d。因其不存在,所以返回0。第二個例子在ANCD中查詢D。因
其存在,所以返回ANCD中D出現的首位置字元數。第三個例子在學生J.Lulu中查詢u。
$ awk 'BEGIN {print match("ANCD", /d/)}'
0
$ awk 'BEGIN {print match("ANCD", /C/)}'
3
$ awk '$1=="J.Lulu" {print match($1, "u")} grade.txt 【注意:如果匹配的是個字串的話,必須加上雙引號】
4
5.split
使用split返回字串陣列元素個數。工作方式如下:如果有一字串,包含一指定分隔符-,例如AD2-KP9-JU2-
LP-1,將之劃分成一個數組。使用split,指定分隔符及陣列名。此例中,命令格式為("AD2-KP9-JU2-LP-
1",parts_array,”-”),split然後返回陣列下標數,這裡結果為4。
還有一個例子使用不同的分隔符。
$ awk 'BEGIN {print split("123#456#678", myarray, "#")}'
3
這個例子中,split返回陣列myarray的下標數。陣列myarray取值如下:
Myarray[1]="123"
Myarray[2]="456"
Myarray[3]="678"
6.sub使用sub發現並替換模式的第一次出現位置。字串STR包含'popedpopopill',執行下列sub命令sub
(/op/,"op",STR)。模式op第一次出現時,進行替換操作,返回結果如下:
'pOPedpopepill'。
假如grade.txt檔案中,學生J.Troll的記錄有兩個值一樣,“目前級別分”與“最高級別分”。只改變第一個為
29,第二個仍為26不動,操作命令為sub(/26/,"29",$0),只替換第一個出現 26的位置。
$ awk '$1=="J.Troll" ,sub(/26/, "29", $0)' grade.txt
L.Troll 07/99 4842 Brown-3 12 29 26
L.Transley 05/99 4712 Brown-2 12 30 28
ps:若將上面的換成gsub,結果就不一樣了
[[email protected] zy]# echo "J.Troll 07/99 4824 Brown-3 12 26 26 "| awk '$1=="J.Troll",gsub(/26/,"29",$0)'
J.Troll 07/99 4824 Brown-3 12 29 29
7.substrsubstr是一個很有用的函式。它按照起始位置及長度返回字串的一部分。例子如下:
$ awk '$1=="L.Transley" {print substr($1, 1,5)}' grade.txt
L.Tan
上面例子中,指定在域1的第一個字元開始,返回其前面5個字元。
如果給定長度值遠大於字串長度, awk將從起始位置返回所有字元,要抽取L.Tansley的姓,只需從第3個字元
開始返回長度為7。可以輸入長度99,awk返回結果相同。
$ awk '{$1=="L.Transley" {print substr($1, 3,99)}' grade.txt
Transley
substr的另一種形式是返回字串字尾或指定位置後面字元。這裡需要給出指定字串及其返回字串的起始位置
。例如,從文字檔案中抽取姓氏,需操作域1,並從第三個字元開始:
$ awk '{print substr($1, 3)}' grade.txt
Troll
Transley
還有一個例子,在BEGIN部分定義字串,在END部分返回從第t個字元開始抽取的子串。
$ awk 'BEGIN {STR="A FEW GOOD MEN"} END {print substr(STR,7)}' grade.txt
GOOD MEN
測試:
[[email protected] zy]# echo "A FEW GOOD MEN,as follows:"|awk 'BEGIN{STR="A FEW GOOD MEN"} END{print substr(STR,7)}'
GOOD MEN
而如果要是單獨輸入awk 'BEGIN{STR="A FEW GOOD MEN"} END{print substr(STR,7)}',它就會卡到那裡~
8.從shell中向awk傳入字串awk指令碼大多隻有一行,其中很少是字串表示的,這一點通過將變數傳入awk命令列會變得很容易。現就其基本原
理講述一些例子。
使用管道將字串stand-by傳入awk,返回其長度。
$ echo "Stand-by" | awk '{print length($0)}'
8
設定檔名為一變數,管道輸出到awk,返回不帶副檔名的檔名。
$ STR="mydoc.txt"
$ echo $STR | awk '{print substr($STR, 1, 5)}'
mydoc設定檔名為一變數,管道輸出到awk,只返回其副檔名。
$ STR="mydoc.txt"
$ echo $STR | awk '{print substr($STR, 7)}'
txt
相關推薦
**awk內建函式小節**
awk提供了許多強大的字串函式,見下表: awk內建字串函式 gsub(r,s) 在整個$0中用s替代r gsub(r,s,t) 在整個t中用s替代r index(s,t) 返回s中字串t的第一位置 length(s) 返回s長度match(s,r) 測試s是否包含
awk 內建函式詳解
本文承接上篇 linux awk 內建變數,本篇總結下awk內建函式。awk內建函式主機分為如下幾種:數學函式、字串函式、時間函式、其它函式。 一、數學函式 以下算術函式執行與 C 語言中名稱相同的子例程相同的操作: 函式名 說明 atan2( y, x )
linux awk 內建函式詳細介紹(例項)
這節詳細介紹awk內建函式,主要分以下3種類似:算數函式、字串函式、其它一般函式、時間函式 一、算術函式: 以下算術函式執行與 C 語言中名稱相同的子例程相同的操作: 函式名 說明 atan2( y, x ) 返回 y/x 的反正切。 cos( x ) 返回 x 的餘弦;x 是弧度。 sin( x ) 返
awk 簡單用法(內建函式)
做為一個windows系統管理員,文字處理將是一個難點,但在linux 裡面顯然就是一盤小白菜.在linux 文字處理工具上面,awk佔了60%的份量,另外還有sed與grep ,這裡主要記錄一些awk常見的使用方法,詳細的大家可以舉一反三, awk 這不是一個單詞,而是這門
awk的內建函式
N gsub(reg,string,target) 每次常規表示式 reg 匹配時替換 target 中的 string N index(search,string) 返回 string 中 search 串的位置 A length(string) 求串 string 中的字元個數 N mat
awk 內建時間函式
mktime建立指定時間 mktime( YYYY MM DD HH MM SS[ DST]) 注意格式,必須都是空格分割。 echo “2014-03-27 17 26 54,” |aw
函式和常用模組【day04】:內建函式(十)
一、36-40 36、isinstance(object, classinfo) 功能:用於判斷,物件是否是某個類的例項 # s = "alex" # 物件,"alex" => str s = [11,11,11] # 用於判斷,物件是否是某個類的例項 r = isinsta
python之路-day3-內建函式
一、 昨日內容回顧 1、生成器 本質就是迭代器 特點: 1、省記憶體 2、惰性機制 3、只能向前 不能反覆 2、生成器函式 函式中的yield 。yield表示返回和return,分段執行一段程式碼 def fun
python D13 內建函式
# 1、內建函式# 什麼是內建函式? 就是python給你提供的. 拿來直接⽤的函式, 比如print., input等等. 截⽌# 到python版本3.6.2 python⼀共提供了68個內建函式. 他們就是python直接提供給我們的. 有# ⼀些我們已經⽤過了. 有⼀些還沒有⽤過. 還有⼀些需
day12-2018-11-2 內建函式
lst = ["唐伯虎", "小娟", "張鶴倫", "燒餅"] # it = lst.__iter__() # print(it.__next__()) # print(it.__next__()) # print(it.__next__()) # print(it.__next__())
python學習day15 day16 內建函式、匿名函式
https://www.processon.com/view/link/5bdc4fe3e4b09ed8b0c75e81 例子: print(locals()) #返回本地作用域中的所有名字 print(globals()) #返回全域性作用域中的所有名字 global 變數 nonlocal
Python全棧學習筆記day 15:內建函式
全部內建函式列表: Built-in Functions abs() dict() help() min()
Python內建函式map
簡介 map()是 Python 內建的高階函式,它接收一個函式 func 和一個 list,並通過把函式 func依次作用在 list 的每個元素上,得到一個新的 list 並返回。 一、當list只有一個時 當list只有一個時,將函式func作用於這個list的每個元素上
day013內建函式一
一、內建函式一 [內建函式思維導圖連結] (https://www.processon.com/view/link/5bdc5328e4b0844e0bc6c846) 內建函式就是python提供的,拿來直接用的,如print,input等等 1.作用域相關的 locals
day_12 內建函式
1. 內建函式 1.雙下劃線方法的使用 1.原來it=lst.__iter__() print(it__next__()) 2.現在it=iter(list) print(next(it)) 2.id() hash()
【轉】Python 內建函式 locals() 和globals()
Python 內建函式 locals() 和globals() 轉自: https://blog.csdn.net/sxingming/article/details/52061630
MySQL 常用內建函式與所有內建函式
MySQL 常用內建函式 【數值函式】 Abs(X) //絕對值abs(-10.9) = 10 Format(X,D) //格式化千分位數值format(1234567.456, 2) =1,234,567.46 Ceil(X) //向上取整ceil(10.1) = 11 Floor(X) //
常用內建函式
dir:檢視當前物件的可呼叫的函式。 help:檢視當前函式的幫助文件 字串: lower():所有的大寫字母轉換成小寫 upper():所有的小寫字母轉換成大寫 swapcase():大寫變小寫,小寫變大寫 title()
9 幾個內建函式
一、 bytes() s = "你好" bs = s.encode("UTF-8") print(bs) s1 = bs.decode("UTF-8") print(s1) bs = bytes(s, encoding="utf-8") # 把字串串編碼成UTF-8 print(b
python day14內建函式二(lambda,sorted,filter,map,遞迴)
一.lambda匿名函式 為了解決一些簡答的需求而設計的一句話函式. 計算n的n次方 1 def func(n): 2 return n**n 3 print(func(10)) lambda 1 f=lambda n:n**n 2 print(f(10))