系統(tǒng)之家 - 系統(tǒng)光盤下載網(wǎng)站!

當前位置:系統(tǒng)之家 > 系統(tǒng)教程 > Linux使用文本處理工具awk

Linux如何使用文本處理工具awk(6)

時間:2015-01-14 18:22:52 作者:qipeng 來源:系統(tǒng)之家 1. 掃描二維碼隨時看資訊 2. 請使用手機瀏覽器訪問: https://m.xitongzhijia.net/xtjc/20150114/34882.html 手機查看 評論

  c.awk ’BEGIN{

  for(k in ENVIRON)

  {

  print k“=”ENVIRON[k];

  }

  }‘ #ENVIRON是awk常量,是數(shù)組

  d.awk ’BEGIN{

  total=0;

  for(i=0;i《=100;i++)

  {

  total+=i;

  }

  print total;

  }‘

  e.awk ’BEGIN{

  total=0;

  i=0;

  do

  {

  total+=i;

  i++;

  }while(i《=100)

  print total;

  }‘

  5.內(nèi)置函數(shù)

  a.算術(shù)函數(shù)

  awk ’BEGIN{OFMT=“%.3f”;fs=sin(1);fe=exp(10);fl=log(10);fi=int(3.1415);print fs,fe,fl,fi;}‘ #OFMT 設(shè)置輸出數(shù)據(jù)格式是保留3位小數(shù)

  awk ’BEGIN{srand();fr=int(100*rand());print fr;}‘ #獲得隨機數(shù)

  b.字符串函數(shù)

  awk ’BEGIN{info=“this is a test2010test!”;gsub(/[0-9]+/,“!”,info);print info}‘ #在 info中查找滿足正則表達式,/[0-9]+/ 用””替換,并且替換后的值,賦值給info 未給info值,默認是$0

  awk ’BEGIN{info=“this is a test2010test!”;print index(info,“test”)?“ok”:“no found”;}‘

  awk ’BEGIN{info=“this is a test2010test!”;print match(info,/[0-9]+/)?“ok”:“no found”;}‘ #正則匹配

  awk ’BEGIN{info=“this is a test2010test!”;print substr(info,4,10);}‘ #從第 4個 字符開始,截取10個長度字符串

  awk ’BEGIN{info=“this is a test”;split(info,tA,“ ”);print length(tA);for(k in tA){print k,tA[k];}}‘ #分割info,動態(tài)創(chuàng)建數(shù)組tA

  c.時間函數(shù)

  awk ’BEGIN{tstamp=mktime(“2001 01 01 12 12 12”);print strftime(“%c”,tstamp);}‘

  awk ’BEGIN{tstamp1=mktime(“2001 01 01 12 12 12”);tstamp2=mktime(“2001 02 01 0 0 0”);print tstamp2-tstamp1;}‘ #求2個時間段中間時間差

  d.其他函數(shù)

  awk ’BEGIN{while(“cat /etc/passwd”|getline){print $0;};close(“/etc/passwd”);}‘ #打開外部文件

  awk ’BEGIN{while(getline 《 “/etc/passwd”){print $0;};close(“/etc/passwd”);}‘ #逐行讀取外部文件

  awk ’BEGIN{print “Enter your name:”;getline name;print name;}‘

  awk ’BEGIN{b=system(“ls -al”);print b;}‘ #調(diào)用外部應(yīng)用程序

  6.輸出函數(shù)

  a.printf

  awk ’BEGIN{n1=124.113;n2=-1.224;n3=1.2345; printf(“%.2f,%.2u,%.2g,%X,%o\n”,n1,n2,n3,n1,n1);}‘ #類似于C語音

  7.awk腳本

  #!/bin/awk -f

  BEGIN{

  for(i=1;i《=9;i++)

  {

  for(j=1;j《=9;j++)

  {

  tarr[i,j]=i*j;

  print i,“*”,j,“=”,tarr[i,j];

  }

  }

  }

  注意

  1.在awk中有兩個特別的表達式,BEGIN和END,這兩者都可用于pattern中,提供BEGIN和END的作用是給程序賦予初始狀態(tài)和程序結(jié)束之后執(zhí)行一些掃尾的工作。任何在BEGIN之后列出的操作(在{}內(nèi))將在awk開始掃描輸入之前執(zhí)行,而END之后的操作將在掃描完全部的輸入之后執(zhí)行。因此通常BEGIN來顯示變量和初始化變量,使用END來輸出最終結(jié)果。

  2.awk中數(shù)據(jù)類型,是不需要定義,自適應(yīng)的。 有時候需要通過(+、“”)強制轉(zhuǎn)換。

  3.awk數(shù)組下標是從1開始,與c數(shù)組不一樣。

  4.awk的多維數(shù)組在本質(zhì)上是一維數(shù)組,更確切一點,awk在存儲上并不支持多維數(shù)組。awk提供了邏輯上模擬二維數(shù)組的訪問方式。例 如,array[2,4] = 1這樣的訪問是允許的。awk使用一個特殊的字符串SUBSEP (\034)作為分割字段,在上面的例子中,關(guān)聯(lián)數(shù)組array存儲的鍵值實際上是2\0344。多維數(shù)組可以使用if((i,j) in array)這樣的語法,但是下標必須放置在圓括號中。多維數(shù)組使用 for ( item in array )這樣的語法遍歷數(shù)組。與一維數(shù)組不同的是,多維數(shù)組必須使用split()函數(shù)來訪問單獨的下標分量。split ( item, subscr, SUBSEP)

  5.awk實現(xiàn)的性能是比shell實現(xiàn)的強

  上面就是Linux下awk文本處理工具的用法介紹了,因為awk是Linux下功能最強大的數(shù)據(jù)處理引擎之一,所以其用法要講解起來可不止文中介紹的這些,本文只是介紹了它的基本用法。

標簽 命令

發(fā)表評論

0

沒有更多評論了

評論就這些咯,讓大家也知道你的獨特見解

立即評論

以上留言僅代表用戶個人觀點,不代表系統(tǒng)之家立場

其他版本軟件

熱門教程

人氣教程排行

Linux系統(tǒng)推薦

掃碼關(guān)注
掃碼關(guān)注

掃碼關(guān)注 官方交流群 軟件收錄