日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

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時間

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

三、特定匹配

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

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

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

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

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

四、BEGIN&END

對某一列求和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個字段開始輸出awk '{for(i=6; i<NF; ++i){printf "%s,",$i};printf "%s\n", $NF}' access_log
從第6個字段開始輸出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       打印第二個字段長度大于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(記錄中域的個數(shù)),則執(zhí)行打印語句,且i增加1。直到i的值大于NF.
$ awk '{for (i = 1; i<NF; i++) print NF,$i}' test。作用同上。
breadkcontinue語句。break用于在滿足條件的情況下跳出循環(huán);continue用于在滿足條件的情況下忽略后面的語句,直接返回循環(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語句從輸入文件中讀取一行,然后從頭開始執(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個字段出現(xiàn)的次數(shù)(字段相同+1)

七、變量
$ awk '$1 ~/test/{count = $2 + $3; print count}' test,上式的作用是,awk先掃描第一個域,一旦test匹配,就把第二個域的值加上第三個域的值,并把結(jié)果賦值給變量count,最后打印出來。
awk可以在命令行中給變量賦值,然后將這個變量傳輸給awk腳本。如$ awk -F: -f awkscript month=4 year=2004 test,上式的month和year都是自定義變量,分別被賦值為4和2004。在awk腳本中,這些變量使用起來就象是在腳本中建立的一樣。注意,如 果參數(shù)前面出現(xiàn)test,那么在BEGIN語句中的變量就不能被使用。
域變量也可被賦值和修改,如$ awk '{$2 = 100 + $1; print }' test,上式表示,如果第二個域不存在,awk將計(jì)算表達(dá)式100加$1的值,并將其賦值給$2,如果第二個域存在,則用表達(dá)式的值覆蓋$2原來的值。 再例如:$ awk '$1 == "root"{$1 ="test";print}' test,如果第一個域的值是“root”,則把它賦值為“test”,注意,字符串一定要用雙引號。
內(nèi)建變量的使用。變量列表在前面已列出,現(xiàn)在舉個例子說明一下。$ awk -F: '{IGNORECASE=1; $1 == "MARY"{print NR,$1,$2,$NF}'test,把IGNORECASE設(shè)為1代表忽略大小寫,打印第一個域是mary的記錄數(shù)、第一個域、第二個域和最后一個 域。
八、重定向和管道
$ 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的第二個元素。
$ 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ù)從終端接收該行輸入,并把它儲存在自定義變量name中。如果第一個域匹配變量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,打印lc的值。注意,如果文件不存在,getline返回-1,如果到達(dá)文件的末尾就返回0,如果讀到一行,就返回1,所以命令 while (getline < "/etc/passwd")在文件不存在的情況下將陷入無限循環(huán),因?yàn)榉祷?1表示邏輯真。
可以在awk中打開一個管道,且同一時刻只能有一個管道存在。通過close()可關(guān)閉管道。如:$ awk '{print $1, $2 | "sort" }' test END {close("sort")}。awd把print語句的輸出通過管道作為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個匹配的行之后,不再讀這個文件。如果輸入是來自一個普通文件的標(biāo)準(zhǔn)輸入,并且已經(jīng)輸出了NUM個匹配的行,grep保證標(biāo)準(zhǔn)輸入被定位于退出時的最后一次匹配的行之后,不管是否指定了要輸出緊隨的下文的行。grep在NUM個匹配的行之后停止,它會輸出任何緊隨的下文的行。
1.3.3 遞歸模式匹配查找
l -R/-r 遞歸地讀每一目錄下的所有文件;
l -R/-r --include=PATTERN 僅僅在搜索匹配PATTERN的文件時在目錄中遞歸搜索;
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)識查找結(jié)果
l --color:將找到的字符串以特殊顏色顯示



未完待續(xù)

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多