中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

織夢網(wǎng)站系統(tǒng)刪除不了百度推廣總部電話

織夢網(wǎng)站系統(tǒng)刪除不了,百度推廣總部電話,八戒網(wǎng)站建設(shè),商城縣建設(shè)局網(wǎng)站文本處理的工作中,awk的數(shù)組是必不可少的工具,在這里,同樣以總結(jié)經(jīng)驗和教訓(xùn)的方式和大家分享下我的一些學(xué)習(xí)心得,如有錯誤的地方,請大家指正和補充。 awk的數(shù)組,一種關(guān)聯(lián)數(shù)組(Associative Array…
文本處理的工作中,awk的數(shù)組是必不可少的工具,在這里,同樣以總結(jié)經(jīng)驗和教訓(xùn)的方式和大家分享下我的一些學(xué)習(xí)心得,如有錯誤的地方,請大家指正和補充。

awk的數(shù)組,一種關(guān)聯(lián)數(shù)組(Associative Arrays),下標可以是數(shù)字和字符串。因無需對數(shù)組名和元素提前聲明,也無需指定元素個數(shù) ,所以awk的數(shù)組使用非常靈活。
首先介紹下幾個awk數(shù)組相關(guān)的知識點:

<1>建立數(shù)組
  1. array[index] = value :數(shù)組名array,下標index以及相應(yīng)的值value。
復(fù)制代碼
<2>讀取數(shù)組值
  1. { for (item in array)??print array[item]} # 輸出的順序是隨機的
  2. {for(i=1;i<=len;i++)??print array[i]} # Len 是數(shù)組的長度
復(fù)制代碼
<3>多維數(shù)組,array[index1,index2,……]:SUBSEP是數(shù)組下標分割符,默認為“\034”。可以事先設(shè)定SUBSEP,也可以直接在SUBSEP的位置輸入你要用的分隔符,如:
  1. awk 'BEGIN{SUBSEP=":";array["a","b"]=1;for(i in array) print i}'
  2. a:b
  3. awk 'BEGIN{array["a"":""b"]=1;for(i in array) print i}'
  4. a:b
復(fù)制代碼
但,有些特殊情況需要避免,如:
  1. awk 'BEGIN{
  2. SUBSEP=":"
  3. array["a","b:c"]=1? ?? ?? ?? ?? ?# 下標為“a:b:c”
  4. array["a:b","c"]=2? ?? ?? ?? ?? ?#下標同樣是“a:b:c”
  5. for (i in array) print i,array[i]}'
  6. a:b:c 2? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?#所以數(shù)組元素只有一個。
復(fù)制代碼
<4>刪除數(shù)組或數(shù)組元素: 使用delete 函數(shù)
  1. delete array? ?? ?? ?? ?? ?? ?? ?#刪除整個數(shù)組
  2. delete array[item]? ?? ?? ???# 刪除某個數(shù)組元素(item)
復(fù)制代碼
<5> 排序:awk中的asort函數(shù)可以實現(xiàn)對數(shù)組的值進行排序,不過排序之后的數(shù)組下標改為從1到數(shù)組的長度。在gawk 3.1.2以后的版本還提供了一個asorti函數(shù),這個函數(shù)不是依據(jù)關(guān)聯(lián)數(shù)組的值,而是依據(jù)關(guān)聯(lián)數(shù)組的下標排序,即asorti(array)以后,仍會用數(shù)字(1到數(shù)組長度)來作為下標,但是array的數(shù)組值變?yōu)榕判蚝蟮脑瓉淼南聵?#xff0c;除非你指定另一個參數(shù)如:asorti(a,b)。(非常感謝lionfun對asorti的指正和補充

  1. echo 'aa
  2. bb
  3. aa
  4. bb
  5. cc' |\
  6. awk '{a[$0]++}END{l=asorti(a);for(i=1;i<=l;i++)print a[i]}'
  7. aa
  8. bb
  9. cc

  10. echo 'aa
  11. bb
  12. aa
  13. bb
  14. cc' |\
  15. awk '{a[$0]++}END{l=asorti(a,b);for(i=1;i<=l;i++)print b[i],a[b[i]]}'
  16. aa 2
  17. bb 2
  18. cc 1
復(fù)制代碼


下面說awk數(shù)組的實際應(yīng)用。

1.??除去重復(fù)項, 這個不多說, 只給出代碼:
  1. awk '!a[$0]++' file(s)? ?? ?? ?? ?? ?? ??
  2. awk '!($0 in a){a[$0];print}' file(s)? ?
復(fù)制代碼
另一種: http://bbs.chinaunix.net/thread-1859344-1-1.html ?

2. 計算總數(shù)(sum),如:
  1. awk??'{name[$0]+=$1};END{for(i in name) print??i, name[i]}'

  2. 再舉個例子:

  3. echo "aaa 1
  4. aaa 1
  5. ccc 1
  6. aaa 1
  7. bbb 1
  8. ccc 1" |awk '{a[$1]+=$2}END{for(i in a) print i,a[i]}'
  9. aaa 3
  10. bbb 1
  11. ccc 2
復(fù)制代碼
3. 查看文件差異。
  1. cat file1
  2. aaa
  3. bbb
  4. ccc
  5. ddd
  6. cat file2
  7. aaa
  8. eee
  9. ddd
  10. fff
復(fù)制代碼
<1>??合并file1和file2,除去重復(fù)項:
  1. awk 'NR==FNR{a[$0]=1;print}? ?#讀取file1,建立數(shù)組a,下標為$0,并賦值為1,然后打印
  2. NR>FNR{? ?? ?? ?? ?? ?? ? #讀取file2
  3. if(!(a[$0])) {print }? ?? ?#如果file2 的$0不存在于數(shù)組a中,即不存在于file1,則打印。
  4. }' file1 file2
  5. aaa
  6. bbb
  7. ccc
  8. ddd
  9. eee
  10. fff
復(fù)制代碼
<2> 提取文件1中有,但文件2中沒有:
  1. awk 'NR==FNR{a[$0]=1}? ?? ?? ???#讀取file2,建立數(shù)組a,下標為$0,并賦值為1
  2. NR>FNR{? ?? ?? ?? ?? ?? ? #讀取file1
  3. if(!(a[$0])) {print }? ?? ?#如果file1 的$0不存在于數(shù)組a中,即不存在于file2,則打印。
  4. }' file2 file1
  5. bbb
  6. ccc
復(fù)制代碼
另: http://bbs.chinaunix.net/viewthr ... &page=1#pid15547885 ?

4.??排序:
  1. echo "a
  2. 1
  3. 0
  4. b
  5. 2
  6. 10
  7. 8
  8. 100" |
  9. awk '{a[$0]=$0} #建立數(shù)組a,下標為$0,賦值也為$0
  10. END{
  11. len=asort(a)? ?? ?#利用asort函數(shù)對數(shù)組a的值排序,同時獲得數(shù)組長度len
  12. for(i=1;i<=len;i++) print i "\t"a[i]??#打印
  13. }'
  14. 1? ?? ? 0
  15. 2? ?? ? 1
  16. 3? ?? ? 2
  17. 4? ?? ? 8
  18. 5? ?? ? 10
  19. 6? ?? ? 100
  20. 7? ?? ? a
  21. 8? ?? ? b
復(fù)制代碼
5.??有序輸出:采用(index in array)的方式打印數(shù)組值的順序是隨機的,如果要按原序輸出,則可以使用下面的方法: http://bbs2.chinaunix.net/viewthread.php?tid=1811279
  1. awk '{a[$1]=$2
  2. c[j++]=$1}
  3. END{
  4. for(m=0;m<j;m++)print c[m],a[c[m]]
  5. }'
復(fù)制代碼
6.??多個文本編輯:這里主要指的是待處理的文本之間的格式上有區(qū)別,如分隔符不同,;或是待處理文本需提取的信息的位置不同,如不同的列或行。
<例1>:
  1. cat file1
  2. g1.1 2
  3. g2.2 4
  4. g2.1 5
  5. g4.1 3
  6. cat file2
  7. g1.1 2
  8. g1.2 3
  9. g4.1 4
  10. cat file3
  11. g1.2 3
  12. g5.1 3
復(fù)制代碼
要求輸出:
  1. g1.1 2 2 -
  2. g1.2 - 3 3
  3. g2.2 4 - -
  4. g2.1 5 - -
  5. g4.1 3 4 -
  6. g5.1 - - 3
復(fù)制代碼
實現(xiàn)代碼如下:
  1. awk '{a[ARGIND" "$1]=$2 # ARGIND是當(dāng)前命令行文件的位置(從0開始),將它和第一列的value作為下標,建立數(shù)組a。
  2. ? ?? ? b[$1]? ?#將第一列的value作為下標,建立數(shù)組b,目的是在讀完所有文件之后,能得到第一列value的uniqe-list。
  3. ? ?? ???}
  4. END{?
  5. ? ?? ???for(i in b) {?
  6. ? ?? ?? ?? ?? ? printf i" "?
  7. ? ?? ?? ?? ?? ? for(j=1;j<=ARGIND;j++) printf "%s ", a[j" "i]?a[j" "i]:"-" #此時的ARGIND值為3.
  8. print ""?
  9. ? ?? ?? ?? ?? ? }
  10. ? ?? ???}' file1 file2 file3
復(fù)制代碼
這里是利用awk的內(nèi)置變量ARGIND來處理完成對文件的處理。關(guān)于ARGIND,ARGV,ARGC的使用,大家可以參考: http://bbs.chinaunix.net/viewthr ... 0335&from=favorites 。
當(dāng)然,我們也可以利用另外一個內(nèi)置變量FILENAME來完成相同的任務(wù)(大家可以先想想怎么寫),如下:
  1. awk '{a[FILENAME" "$1]=$2;b[$1];c[FILENAME]}END{for(i in b) {printf i" ";for(j in c) printf "%s ", a[j" "i]?a[j" "i]:"-";print""}}' file1 file2 file3
復(fù)制代碼
<例2>:對上面的數(shù)據(jù)的格式稍作改動,每個文件的分隔符都一樣的情況,但輸出要求不變:
  1. cat file1
  2. g1.1|2
  3. g2.2|4
  4. g2.1|5
  5. g4.1|3
  6. cat file2
  7. g1.1#2
  8. g1.2#3
  9. g4.1#4
  10. cat file3
  11. g1.2@3
  12. g5.1@3
復(fù)制代碼
實現(xiàn)代碼如下:
  1. awk '{a[ARGIND" "$1]=$2
  2. b[$1]
  3. }
  4. END{
  5. for(i in b) {
  6. printf i" "
  7. for(j=2;j<=ARGIND;j+=2) printf "%s ", a[j" "i]?a[j" "i]:"-" # 由于FS的設(shè)置也是有對應(yīng)ARGIND值,所以對ARGIND稍作改動。
  8. print ""
  9. }
  10. }' FS="|" file1 FS="#" file2 FS="@" file3 # 對每個文件分別設(shè)置FS的值。
復(fù)制代碼
因為這個例子的數(shù)據(jù)比較簡單,我們也可以在BEGIN模塊中完成對FS值設(shè)置,如下:
  1. awk 'BEGIN{FS="[|#@]"}{a[ARGIND" "$1]=$2; b[$1]}END{for(i in b) {printf i" ";for(j=1;j<=ARGIND;j++) printf "%s ", a[j" "i]?a[j" "i]:"-"; print ""}}' file1 file2 file3
復(fù)制代碼
利用FILENAME 同樣可以解決問題:
  1. awk '
  2. FILENAME=="file1"{FS="|"}? ? # 設(shè)置FS
  3. FILENAME=="file2"{FS="#"}? ?#設(shè)置FS
  4. FILENAME=="file3"{FS="@"}??#設(shè)置FS?
  5. # 稍顯繁瑣,不過一目了然
  6. {$0=$0}? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???#使FS生效。
  7. {a[ARGIND" "$1]=$2; b[$1]}
  8. END{ for(i in b) {printf i" "; for(j=1;j<=ARGIND;j++) printf "%s ", a[j" "i]?a[j" "i]:"-"; print ""}
  9. }' file1 file2 file3
復(fù)制代碼
推薦一個關(guān)于數(shù)組處理文件的帖子 http://www.chinaunix.net/jh/24/577044.html ?,里面有不少例子供大家學(xué)習(xí)。

7.??文本翻轉(zhuǎn)或移位:二維或多維數(shù)組的應(yīng)用
<例1>:
  1. Inputfile
  2. 1 2 3 4 5 6
  3. 2 3 4 5 6 1
  4. 3 4 5 6 1 2
  5. 4 5 6 1 2 3
  6. Outputfile
  7. 4 3 2 1
  8. 5 4 3 2
  9. 6 5 4 3
  10. 1 6 5 4
  11. 2 1 6 5
  12. 3 2 1 6

  13. awk '{
  14. ? ???if (max_nf < NF)
  15. ? ?? ?? ? max_nf = NF # 數(shù)組第一維的長度
  16. ? ???max_nr = NR? ?? ?# 數(shù)組第二維的長度
  17. ? ???for (x = 1; x <= NF; x++)
  18. ? ?? ?? ? vector[x, NR] = $x #建立數(shù)組vector
  19. }
  20. END {
  21. ? ???for (x = 1; x <= max_nf; x++) {
  22. ? ?? ?? ? for (y = max_nr; y >= 1; --y)
  23. ? ?? ?? ?? ?? ?printf("%s ", vector[x, y])
  24. ? ?? ?? ? printf("\n")
  25. ? ???}
  26. }'
復(fù)制代碼
<例2>:來自 http://bbs.chinaunix.net/viewthr ... &page=1#pid13339226
有兩個文本a和b,要求輸出c文本,合并的規(guī)則是按照第一行的headline(按字母順序)合并文本a和b,空缺按“0”補齊。
  1. cat a.txt
  2. a b c d
  3. 1 2 9 7
  4. 4 5 8 9
  5. 5 3 6 1
  6. cat b.txt
  7. a e f d g
  8. 9 2 4 7 3
  9. 4 3 7 9 4
  10. cat c.txt
  11. a b c d e f g
  12. 1 2 9 7 0 0 0
  13. 4 5 8 9 0 0 0
  14. 5 3 6 1 0 0 0
  15. 9 0 0 7 2 4 3
  16. 4 0 0 9 3 7 4
復(fù)制代碼
下面我們來參看并解讀下Tim大師的代碼:
  1. awk '
  2. FNR==1{? ? #FNR==1,即a和b文本的第一行,這個用的真的很巧妙。
  3. ? ?? ???for(i=1;i<=NF;i++){?
  4. ? ?? ?? ?? ?? ? b[i]=$i? ? #讀取文本的每個元素存入數(shù)組b
  5. ? ?? ?? ?? ?? ? c[$i]++}??#另建立數(shù)組c,并統(tǒng)計每個元素的個數(shù)
  6. ? ?? ?? ?? ?? ? next? ?? ?? ? #可以理解為,讀取FNR!=1的文本內(nèi)容。
  7. ? ?? ???}
  8. {k++? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? # 統(tǒng)計除去第一行的文本行數(shù)
  9. for(i=1;i<=NF;i++)a[k","b[i]]=$i??#利用一個二維數(shù)組來保持每個數(shù)字的位置, k,b[i]可以理解為每個數(shù)字的坐標。
  10. }
  11. END{
  12. ? ?? ???l=asorti(c)? ?? ?? ? #利用asorti函數(shù)對數(shù)組的下標進行排序,并獲取數(shù)組長度,即輸出文件的列數(shù)(NF值)
  13. ? ?? ???for(i=1;i<=l;i++)printf c[i]" " # 先打印第一行,相當(dāng)于headline。
  14. ? ?? ???print ""
  15. ? ?? ???for(i=1;i<=k;i++){
  16. ? ?? ?? ?? ?? ? for(j=1;j<=l;j++)printf a[i","c[j]]?a[i","c[j]]" ":"0 " # 打印二維數(shù)組的值。
  17. ? ?? ?? ?? ?? ? print ""}
  18. ? ?? ???}' a.txt b.txt
復(fù)制代碼
8.??選擇性打印:
打印某個關(guān)鍵字前幾行,以3行為例:
  1. seq 20 |awk '/\<10\>/{for(i=NR-3;i<NR;i++)print a[i%3];exit}{a[NR%3]=$0}'
  2. 7
  3. 8
  4. 9
復(fù)制代碼
利用NR取余數(shù),建立數(shù)組,這是一種非常高效的代碼。

9. 通過split函數(shù)建立數(shù)組:數(shù)組的下標為從1開始的數(shù)字。
  1. split(s, a [, r]) # s:string, a:array name,[,r]:regular expression。
  2. echo 'abcd' |awk '{len=split($0,a,"");for(i=1;i<=len;i++) print "a["i"] = " a[i];print "length = " len}'
  3. a[1] = a
  4. a[2] = b
  5. a[3] = c
  6. a[4] = d
  7. length = 4
復(fù)制代碼
10. awk數(shù)組使用的小技巧和需要避免的用法:

<1> 嵌套數(shù)組:
  1. awk 'BEGIN{a[1]=3;b[1]=1;print a[b[1]]}'
  2. 3
復(fù)制代碼
<2> 下標設(shè)為變量或函數(shù):
  1. awk 'BEGIN{s=123;a[substr(s,2)]=substr(s,1,1);for(i in a)print "index : "i"\nvalue : "a[i]}'
  2. index : 23
  3. value : 1
復(fù)制代碼
<3> 不可以將數(shù)組名作為變量使用,否則會報錯:
  1. awk 'BEGIN{a["1"] = 3; delete a;a=3;print a}'??#即使你已經(jīng)使用了delete函數(shù)。
  2. awk: fatal: attempt to use array `a' in a scalar context
復(fù)制代碼
<4> 數(shù)組的長度:
  1. length(array)??
復(fù)制代碼
<5> match 函數(shù)也可以建立數(shù)組(你知道么? ,版本要求高于gawk 3.1.2)
  1. echo "foooobazbarrrrr |?
  2. gawk '{ match($0, /(fo+).+(bar*)/, arr)??#匹配到的部分自動賦值到arr中,下標從1開始
  3. ? ?? ?? ? print arr[1], arr[2]
  4. ? ?? ?? ? print arr[1, "start"], arr[1, "length"]??#二維數(shù)組arr[index,"start"]值=RSTART
  5. ? ?? ?? ? print arr[2, "start"], arr[2, "length"]??#二維數(shù)組arr[index,"length"]值=RLENGTH
  6. ? ?? ?? ? }'
  7. foooo barrrrr
  8. 1 5
  9. 9 7
復(fù)制代碼
<6>想到過用split清空數(shù)組么?
  1. awk 'BEGIN{
  2. split("abc",array,"")
  3. print "array[1] = "array[1],"\narray[2] = "array[2],"\narray[3] = "array[3]
  4. split("",array)
  5. print "array[1] = "array[1],"\narray[2] ="array[2],"\narray[3] ="array[3]
  6. }'
  7. array[1] = a
  8. array[2] = b
  9. array[3] = c
  10. array[1] =
  11. array[2] =
  12. array[3] =
復(fù)制代碼
http://www.risenshineclean.com/news/38680.html

相關(guān)文章:

  • webapp 做視頻網(wǎng)站工具seo
  • 做網(wǎng)站時圖片的分辨率是多少淘寶店鋪推廣
  • 什么是營銷策劃湖南seo排名
  • 安徽六安天氣預(yù)報google搜索引擎優(yōu)化
  • 網(wǎng)站建設(shè)委托外包協(xié)議驚艷的網(wǎng)站設(shè)計
  • 北京小程序開發(fā)多少錢seo崗位培訓(xùn)
  • 中小企業(yè)網(wǎng)站建設(shè) 網(wǎng)絡(luò)營銷企業(yè)網(wǎng)站建設(shè)報價表
  • 玉林市住房和城鄉(xiāng)建設(shè)局網(wǎng)站關(guān)于進一步優(yōu)化落實疫情防控措施
  • php做網(wǎng)站真的有前途嗎個人發(fā)布信息的免費平臺
  • 網(wǎng)站建設(shè) 證書網(wǎng)站推廣軟件哪個好
  • 網(wǎng)站負責(zé)人 法人可以下載新聞視頻的網(wǎng)站
  • 網(wǎng)站開發(fā)使用哪種工具好網(wǎng)推技巧
  • 企業(yè)信用信息公示系統(tǒng)福建谷歌優(yōu)化技巧
  • 網(wǎng)站建設(shè)的基本內(nèi)容免費直鏈平臺
  • 仙桃網(wǎng)站設(shè)計網(wǎng)絡(luò)推廣的工作好做嗎
  • 有的網(wǎng)站打開的是html結(jié)尾的路徑有的不是互聯(lián)網(wǎng)運營推廣公司
  • 廣州中小企業(yè)網(wǎng)站制作seo網(wǎng)站推廣實例
  • 電子商務(wù)網(wǎng)站管理內(nèi)容競價托管推廣公司
  • 網(wǎng)站建設(shè)數(shù)據(jù)庫系統(tǒng)什么都不懂能去干運營嗎
  • 汕頭建設(shè)局網(wǎng)站國家新聞最新消息今天
  • 網(wǎng)站支付平臺是怎么做的什么公司適合做seo優(yōu)化
  • 做網(wǎng)站要怎么備案網(wǎng)站建設(shè)是什么
  • 新華書店的做的數(shù)字閱讀網(wǎng)站51外鏈代發(fā)網(wǎng)
  • 建網(wǎng)站公司用什么網(wǎng)站程序濟南百度競價開戶
  • 網(wǎng)站制作與網(wǎng)頁設(shè)計seo公司軟件
  • 一站式服務(wù)理念打廣告推廣怎么做
  • 網(wǎng)站開發(fā) 價格差異百度號碼認證平臺官網(wǎng)首頁
  • 自己做soho需要做網(wǎng)站嗎長春網(wǎng)站制作公司
  • 網(wǎng)站建設(shè)公司怎么免費自己做推廣
  • 怎么做自己的網(wǎng)站自建一個頁面友情鏈接圖片