乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      awk總結(jié)

       jas0n_liu 2012-07-17

      一、顯示特定行

      1.awk 'NR%2==1' file / /顯示奇數(shù)行
      2.sed -n '1,$n;p' file / /顯示偶數(shù)行
      3.sed -n '1,$p;n' file / /顯示奇數(shù)行
      4.奇數(shù)行:sed '2~2d' file / /顯示奇數(shù)行
      5.偶數(shù)行:sed '1~2d' file/ /顯示偶數(shù)行

      二、修改Unix時(shí)間

      linux獲得 Unix時(shí)間戳方法:awk 'BEGIN{print systime()}'
      date 轉(zhuǎn)換法:date -d @1328075260
      awk方法:awk '{$1=strftime("%Y-%m-%d-%H:%M:%S",$1); print $0}

      三、特定匹配

      匹配第七個(gè)字段以mp4結(jié)尾的第三個(gè)域
      awk '$7~/mp4$/ {print $3}'

      $ awk '$1 ~/[0-9][0-9]$/(print $1}' test-----如果第一個(gè)域以兩個(gè)數(shù)字結(jié)束就打印這個(gè)記錄。

      $ awk '$1 != 10' test-----如果第一個(gè)域不等于10就打印該行

      $ awk '$1 == 100 || $2 < 50' test-----如果第一個(gè)或等于100或者第二個(gè)域小于50,則打印該行。

      $ awk '/^root/,/^mysql/' test----打印以正則表達(dá)式root開頭的記錄到以正則表達(dá)式mysql開頭的記錄范圍內(nèi)的所有記錄。如果找到一個(gè)新的正則表達(dá)式root開頭的記錄,則繼續(xù)打印直到下一個(gè)以正則表達(dá)式mysql開頭的記錄為止,或到文件末尾。

      四、BEGIN&END

      對(duì)某一列求和awk 'BEGIN{sum=0} {sum=$9+sum} END {print "sum " sum}' data
                              awk '{num+=$1} END {print unm}'
      求平均數(shù) awk 'BEGIN{sum=0} {sum=$9+sum} END {print "average " sum / FNR}' access_log
      從第6個(gè)字段開始輸出awk '{for(i=6; i<NF; ++i){printf "%s,",$i};printf "%s\n", $NF}' access_log
      從第6個(gè)字段開始輸出awk '{for(i=6; i= 6 && NR <=100) printf "%d: %s\n", NR, $7}' access_log
      五、IF條件和循環(huán)
      awk '{if ($NF>3) print $0}'   xxx.txt   最后一列大于3行打印
      awk '{if (length($2)>3) print $0}'  xxx.txt       打印第二個(gè)字段長(zhǎng)度大于3的行
      $awk '{if($2 ~ /^baidu$/) print $0}'  xxx.txt  打印第二列為百度的字段  $awk '$2 ~ /^baidu$/ {print $0}' xxx.txt
      awk有三種循環(huán):while循環(huán);for循環(huán);special for循環(huán)。
      $ awk '{ i = 1; while ( i <= NF ) { print NF,$i; i++}}' test。變量的初始值為1,若i小于可等于NF(記錄中域的個(gè)數(shù)),則執(zhí)行打印語(yǔ)句,且i增加1。直到i的值大于NF.
      $ awk '{for (i = 1; i<NF; i++) print NF,$i}' test。作用同上。
      breadkcontinue語(yǔ)句。break用于在滿足條件的情況下跳出循環(huán);continue用于在滿足條件的情況下忽略后面的語(yǔ)句,直接返回循環(huán)的頂端。如:
      {for ( x=3; x<=NF; x++)
                  if ($x<0){print "Bottomed out!"; break}}
      {for ( x=3; x<=NF; x++)
                  if ($x==0){print "Get next item"; continue}}
      next語(yǔ)句從輸入文件中讀取一行,然后從頭開始執(zhí)行awk腳本。如:
      {if ($1 ~/test/){next}
          else {print}
      }

      六、數(shù)組
      awk '{a[$(NF-2)]++}END{for(i in a) print i,a[i]}'   xxx.txt       統(tǒng)計(jì)倒數(shù)第2個(gè)字段出現(xiàn)的次數(shù)(字段相同+1)

      七、變量
      $ awk '$1 ~/test/{count = $2 + $3; print count}' test,上式的作用是,awk先掃描第一個(gè)域,一旦test匹配,就把第二個(gè)域的值加上第三個(gè)域的值,并把結(jié)果賦值給變量count,最后打印出來(lái)。
      awk可以在命令行中給變量賦值,然后將這個(gè)變量傳輸給awk腳本。如$ awk -F: -f awkscript month=4 year=2004 test,上式的month和year都是自定義變量,分別被賦值為4和2004。在awk腳本中,這些變量使用起來(lái)就象是在腳本中建立的一樣。注意,如 果參數(shù)前面出現(xiàn)test,那么在BEGIN語(yǔ)句中的變量就不能被使用。
      域變量也可被賦值和修改,如$ awk '{$2 = 100 + $1; print }' test,上式表示,如果第二個(gè)域不存在,awk將計(jì)算表達(dá)式100加$1的值,并將其賦值給$2,如果第二個(gè)域存在,則用表達(dá)式的值覆蓋$2原來(lái)的值。 再例如:$ awk '$1 == "root"{$1 ="test";print}' test,如果第一個(gè)域的值是“root”,則把它賦值為“test”,注意,字符串一定要用雙引號(hào)。
      內(nèi)建變量的使用。變量列表在前面已列出,現(xiàn)在舉個(gè)例子說(shuō)明一下。$ awk -F: '{IGNORECASE=1; $1 == "MARY"{print NR,$1,$2,$NF}'test,把IGNORECASE設(shè)為1代表忽略大小寫,打印第一個(gè)域是mary的記錄數(shù)、第一個(gè)域、第二個(gè)域和最后一個(gè) 域。
      八、重定向和管道
      $ awk 'BEGIN{ "date" | getline d; print d}' test。執(zhí)行l(wèi)inux的date命令,并通過管道輸出給getline,然后再把輸出賦值給自定義變量d,并打印它。
      $ awk 'BEGIN{"date" | getline d; split(d,mon); print mon[2]}' test。執(zhí)行shell的date命令,并通過管道輸出給getline,然后getline從管道中讀取并將輸入賦值給d,split函數(shù)把變量d轉(zhuǎn)化成數(shù)組mon,然后打印數(shù)組mon的第二個(gè)元素。
      $ awk 'BEGIN{while( "ls" | getline) print}',命令ls的輸出傳遞給geline作為輸入,循環(huán)使getline從ls的輸出中讀取一行,并把它打印到屏幕。這里沒有輸入文件,因?yàn)锽EGIN塊在打開輸入文件前執(zhí)行,所以可以忽略輸入文件。

      $ awk 'BEGIN{printf "What is your name?"; getline name < "/dev/tty" } $1 ~name {print "Found" name on line ", NR "."} END{print "See you," name "."} test。在屏幕上打印”What is your name?",并等待用戶應(yīng)答。當(dāng)一行輸入完畢后,getline函數(shù)從終端接收該行輸入,并把它儲(chǔ)存在自定義變量name中。如果第一個(gè)域匹配變量name的值,print函數(shù)就被執(zhí)行,END塊打印See you和name的值。
      $ awk 'BEGIN{while (getline < "/etc/passwd" > 0) lc++; print lc}'。awk將逐行讀取文件/etc/passwd的內(nèi)容,在到達(dá)文件末尾前,計(jì)數(shù)器lc一直增加,當(dāng)?shù)侥┪矔r(shí),打印lc的值。注意,如果文件不存在,getline返回-1,如果到達(dá)文件的末尾就返回0,如果讀到一行,就返回1,所以命令 while (getline < "/etc/passwd")在文件不存在的情況下將陷入無(wú)限循環(huán),因?yàn)榉祷?1表示邏輯真。
      可以在awk中打開一個(gè)管道,且同一時(shí)刻只能有一個(gè)管道存在。通過close()可關(guān)閉管道。如:$ awk '{print $1, $2 | "sort" }' test END {close("sort")}。awd把print語(yǔ)句的輸出通過管道作為linux命令sort的輸入,END塊執(zhí)行關(guān)閉管道操作。
      system函數(shù)可以在awk中執(zhí)行l(wèi)inux的命令。如:$ awk 'BEGIN{system("clear")'。




      1.3.2 打印指定的匹配行數(shù)

      l -m NUM, --max-count=NUM
      在找到NUM個(gè)匹配的行之后,不再讀這個(gè)文件。如果輸入是來(lái)自一個(gè)普通文件的標(biāo)準(zhǔn)輸入,并且已經(jīng)輸出了NUM個(gè)匹配的行,grep保證標(biāo)準(zhǔn)輸入被定位于退出時(shí)的最后一次匹配的行之后,不管是否指定了要輸出緊隨的下文的行。grep在NUM個(gè)匹配的行之后停止,它會(huì)輸出任何緊隨的下文的行。
      1.3.3 遞歸模式匹配查找
      l -R/-r 遞歸地讀每一目錄下的所有文件;
      l -R/-r --include=PATTERN 僅僅在搜索匹配PATTERN的文件時(shí)在目錄中遞歸搜索;
      l -R/-r --exclude=PATTERN 在目錄中遞歸搜索,但是跳過匹配PATTERN的文件。
      示例:grep忽略svn文件
      1、使用管道進(jìn)行雙層“過濾”,其中第二次grep使用了-v選項(xiàng),即逆向匹配,打印出不匹配的行,如下:
      $grep -r 'function_name' * | grep -v '.svn'
      2、直接使用--exclude-dir選項(xiàng),即指定排除目錄,注意svn前的 \.如下:
      $grep -r --exclude =\.svn 'function_name' *
      1.3.3.1 顏色標(biāo)識(shí)查找結(jié)果
      l --color:將找到的字符串以特殊顏色顯示



      未完待續(xù)

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多