青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Prayer

在一般中尋求卓越
posts - 1256, comments - 190, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

awk內置字符串函數詳解

Posted on 2010-03-28 17:14 Prayer 閱讀(553) 評論(0)  編輯 收藏 引用 所屬分類: Shell
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
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)匹配。
sub(s,p)返回字符串s在位置p后的后綴。substr(s,p,n)同上,并指定子串長度為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

還有一種方法,這里字符串加雙引號。

$ awk 'BEGIN {print length("A FEW GOOD MEN")}'
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]="789"

6.sub
使用sub發現并替換模式的第一次出現位置。字符串STR包含‘popedpopopill’,執行下
列sub命令sub(/op/,"op",STR)。模式op第一次出現時,進行替換操作,返回結果如下:
‘pOPedpopepill’。
假如grade.txt文件中,學生J.Troll的記錄有兩個值一樣,“目前級別分”與“最高級別分”。只
改變第一個為29,第二個仍為24不動,操作命令為sub(/26/,"29",$0),只替換第一個出現
24的位置。

$ 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

7.substr
substr是一個很有用的函數。它按照起始位置及長度返回字符串的一部分。例子如下:

$ 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

8.從shell中向awk傳入字符串
awk腳本大多只有一行,其中很少是字符串表示的,這一點通過將變量傳入awk命令行會變得很容易。現就其基本原理講述一些例子。
使用管道將字符串stand-by傳入awk,返回其長度。

$ echo "Stand-by" | awk '{print length($0)}'
8

設置文件名為一變量,管道輸出到awk,返回不帶擴展名的文件名。

$ STR="mydoc.txt"
$ echo $STR | awk '{print subst($STR, 1, 5)}'
mydoc

設置文件名為一變量,管道輸出到awk,只返回其擴展名。
$ STR="mydoc.txt"
$ echo $STR | awk '{print substr($STR, 7)}'
txt
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美区在线播放| 亚洲欧美日韩在线综合| 欧美丰满高潮xxxx喷水动漫| 国产精品一二三| 最新日韩中文字幕| 久久久噜噜噜久久| 噜噜噜在线观看免费视频日韩| 国产中文一区二区三区| 亚洲午夜免费福利视频| 欧美影片第一页| 好看的亚洲午夜视频在线| 久久久亚洲国产天美传媒修理工| 麻豆成人综合网| 亚洲精品日韩欧美| 国产欧美一区二区精品婷婷| 先锋资源久久| 久久综合99re88久久爱| 亚洲美女av网站| 国产日韩欧美不卡在线| 欧美成在线视频| 亚洲自啪免费| 日韩视频在线一区二区三区| 久久精品九九| 亚洲视频第一页| 亚洲精品一区二区三区四区高清| 欧美午夜电影完整版| 亚洲欧美综合| 亚洲欧美激情诱惑| 韩国精品在线观看| 狼人社综合社区| 在线综合亚洲欧美在线视频| 亚洲激情视频网站| 亚洲精品小视频在线观看| 亚洲人成网站影音先锋播放| 亚洲视频1区2区| 在线播放中文一区| 久久青青草原一区二区| 国产嫩草影院久久久久 | 久久xxxx精品视频| 久久精品一本| 欧美不卡在线视频| 久久久亚洲国产美女国产盗摄| 国产精品私人影院| 久久精品91| 亚洲视频1区2区| 99精品视频一区| 模特精品在线| 一本色道久久综合亚洲精品不卡 | 亚洲国产女人aaa毛片在线| 亚洲国产精品一区二区www在线 | 亚洲午夜免费视频| 久久成人av少妇免费| 欧美午夜精品伦理| 亚洲一区影院| 欧美岛国激情| 亚洲国产精品成人综合色在线婷婷| 欧美日韩a区| 99re热这里只有精品视频| 在线亚洲免费| 亚洲性视频h| 国产精品美女久久久浪潮软件 | 久久一区二区三区av| 一本久久综合亚洲鲁鲁| 午夜一级在线看亚洲| 久久精品视频在线看| …久久精品99久久香蕉国产| 欧美性猛交视频| 欧美99在线视频观看| 亚洲天堂偷拍| 久久综合久色欧美综合狠狠| 亚洲欧美成人网| 亚洲国产mv| 亚洲网站在线播放| 欧美国产第一页| 免费在线成人| 最新69国产成人精品视频免费| 久久一区二区三区超碰国产精品| 欧美aⅴ99久久黑人专区| 在线免费观看一区二区三区| 免费成人av在线| 亚洲国产欧美不卡在线观看| 99riav国产精品| 国产精品美女久久久久av超清| 亚洲欧美国产制服动漫| 久久综合色一综合色88| 亚洲国产一区二区视频| 欧美人在线观看| 亚洲欧美激情诱惑| 欧美a级片网| 亚洲一区二区精品在线观看| 国产精品夜夜夜| 久久亚洲午夜电影| 亚洲作爱视频| 久久久久久久尹人综合网亚洲| 亚洲第一福利社区| 欧美日产在线观看| 欧美亚洲视频| 亚洲欧洲精品天堂一级| 香蕉免费一区二区三区在线观看| 黄色精品一区| 欧美日韩中文在线观看| 久久精品91| 宅男噜噜噜66一区二区66| 久久久久欧美| 亚洲欧美变态国产另类| 亚洲国产视频一区二区| 国产精品久久久一区麻豆最新章节| 久久久国产精品一区二区三区| 亚洲伦理自拍| 久久夜色精品国产噜噜av| 国产日韩欧美在线播放| 免费观看在线综合色| 亚洲午夜一二三区视频| 欧美国产日本| 久久国产精品久久国产精品| 日韩亚洲视频| 一区二区在线免费观看| 国产精品乱人伦中文| 欧美jizz19性欧美| 日韩写真视频在线观看| 亚洲国产精品热久久| 欧美国产日韩精品| 欧美一级艳片视频免费观看| 乱人伦精品视频在线观看| 香蕉成人伊视频在线观看| 欧美91视频| 欧美激情精品久久久六区热门| 国产欧美亚洲视频| 亚洲婷婷综合久久一本伊一区| 亚洲免费视频一区二区| 中文一区二区| 欧美三级免费| 亚洲天堂男人| 久久精品青青大伊人av| 国产一区二区三区电影在线观看| 亚洲一区二区三区精品在线| 亚洲午夜成aⅴ人片| 国产精品青草久久| 久久精品一二三区| 国产精品日本一区二区| 欧美亚洲午夜视频在线观看| 久久久www成人免费无遮挡大片| 国产欧美日韩亚洲一区二区三区| 小黄鸭精品密入口导航| 免费久久99精品国产自在现线| 亚洲黄色影院| 亚洲免费电影在线观看| 亚洲图中文字幕| 国产一区二区精品久久| 欧美 日韩 国产一区二区在线视频| 亚洲第一精品在线| 欧美一区三区三区高中清蜜桃| 亚洲激精日韩激精欧美精品| 国产精品日日摸夜夜添夜夜av| 欧美一二三视频| 日韩一区二区精品| 久久免费黄色| 午夜精品影院| 99精品欧美一区二区三区综合在线| 国产精品一区二区在线| 欧美国产日韩二区| 欧美.www| 欧美在线视频一区| 亚洲综合日韩| av成人免费观看| 亚洲精品日韩激情在线电影| 女生裸体视频一区二区三区| 亚洲欧美综合一区| 午夜精品福利在线| 欧美视频日韩视频| 欧美福利一区二区三区| 久久久久国产精品www| 亚洲淫性视频| 一区二区三区www| 一本色道久久综合一区| 日韩视频在线一区二区三区| 亚洲人成网站影音先锋播放| 欧美国产在线电影| 亚洲国产精品久久91精品| 亚洲国产精品成人综合| 亚洲日本成人| 亚洲天堂免费观看| 亚洲欧美资源在线| 久久九九国产| 欧美激情国产精品| 欧美日韩综合不卡| 国产久一道中文一区| 国产真实精品久久二三区| 一区二区三区自拍| 9i看片成人免费高清| 麻豆freexxxx性91精品| 欧美日本二区| 一区二区视频在线观看| 亚洲一区二区视频在线| 蜜桃av一区二区| 宅男精品视频| 欧美激情视频在线免费观看 欧美视频免费一 | 亚洲老板91色精品久久| 亚洲欧美日韩在线不卡| 亚洲第一中文字幕|