真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

awk怎么用-創(chuàng)新互聯(lián)

這篇文章主要介紹了awk怎么用,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

西疇ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書(shū)銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書(shū)合作)期待與您的合作!

1. 首先簡(jiǎn)要總結(jié)一些文本處理三劍客:

   grep族:文本過(guò)濾工具

   sed:行編輯工具

2. 下面就來(lái)看看awk是什么?

  awk現(xiàn)在linux上用的是GNU awk即gawk ,現(xiàn)在centos系統(tǒng)上awk是gawk的一個(gè)符號(hào)鏈接文件。那么awk究竟在centos系統(tǒng)上是用來(lái)做什么的呢?awk就是一個(gè)報(bào)告生成器,格式化文本輸出的工具。

3. 學(xué)習(xí)awk對(duì)有什么幫助呢?

  學(xué)習(xí)awk我們可以輕松的對(duì)我們想要處理的文本進(jìn)行查看等,方便我們解決問(wèn)題。

4. gawk的基本用法:

 gawk - pattern scanning and processing language模式掃描及處理語(yǔ)言

 語(yǔ)法: gawk  [options ] ‘program’ file ...

  詳說(shuō)其中:

 4.1 [options]:

    -F指明輸入時(shí)的字段分隔符

    -v VAR=VALUE 主要用于實(shí)現(xiàn)自定義變量

 4.2 program:PATTERN{ACTION STATEMENTS}

      語(yǔ)句之間用分號(hào)分隔

      內(nèi)建命令: print,printf

5. 選項(xiàng)中的使用的變量:

 5.1 變量  (注:awk中自己的變量是不能加$符的,跟bash是不一樣的)

   內(nèi)建變量:

     FS:input field seperator 輸入字段分隔符,默認(rèn)為空白字符

     此等同于-F分隔符

     OFS:output field seperator 輸出字段分隔符,默認(rèn)為空白字符

eg:

[root@bucktan ~]# tail -2 /etc/fstab| awk -v OFS=':' '{print $1,$3}'

sysfs:sysfs

proc:proc

[root@bucktan ~]# tail -2 /etc/fstab

sysfs          /sys           sysfs  defaults     0 0

proc           /proc          proc   defaults     0 0

[root@bucktan ~]# tail -2 /etc/passwd| awk -v FS=':' '{print $1,$3}'

apple 2000

zabbix 495

      RS:input record sepereator指定輸入時(shí)的換行符

      ORS:output record sepereator指定輸出時(shí)的換行符

eg:

[root@bucktan ~]# awk -v RS=' ' -v ORS='##' '{print}' /etc/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin

games:x:12:100:games:/usr/games:/sbin/nologin

gopher:x:13:30:gopher:/var/gopher:/sbin/nologin

ftp:x:14:50:FTP##User:/var/ftp:/sbin/nologin

nobody:x:99:99:Nobody:/:/sbin/nologin

dbus:x:81:81:System##message##bus:/:/sbin/nologin

 注意看其中的#號(hào)

      NF:number of field 統(tǒng)計(jì)每一行字段的數(shù)量

       {print NF}

       {print $NF}:打印最后一個(gè)字段

       ~]# awk '{print NF}' /etc/passwd

eg:

[root@bucktan ~]# awk -F: '{print $NF}' /etc/passwd

      NR:number of record打印每一行的行號(hào),但事實(shí)上統(tǒng)計(jì)的是文件的總體行數(shù)

      FNR:各文件分別計(jì)數(shù),計(jì)行數(shù)

      FILENAME:當(dāng)前正在處理的文件名

      ARGC:命令行參數(shù)的個(gè)數(shù)

      ARGV:數(shù)組,保存的是命令行所給定的各參數(shù)

        ARGV[0]:第一個(gè)參數(shù)

       。。。。。

eg:

[root@bucktan ~]# awk 'BEGIN{print ARGV[0]}' /etc/passwd /etc/fstab

awk

[root@bucktan ~]# awk 'BEGIN{print ARGV[1]}' /etc/passwd /etc/fstab

/etc/passwd

注:BEGIN的作用是實(shí)現(xiàn)不會(huì)對(duì)每一行打印的結(jié)果。如果沒(méi)有BEGIN則每一行都要顯示一個(gè)打印的值

 5.2自定義變量:

    (1):-v var=value   變量名區(qū)分字符大小寫(xiě)

    (2):在program中直接定義

eg:

[root@bucktan ~]# awk -v abc='love you' '{print abc}’ /etc/passwd

另一種實(shí)現(xiàn):

[root@bucktan ~]# awk 'BEGIN{abc="love you"; print abc} '

love you

    語(yǔ)法: gawk  [options ] ‘program’ file ...

    program:PATTERN{ACTION STATEMENTS}

6. 其中的內(nèi)建命令

  6.1:print(用于{ACTION STATEMENTS}中)

    print iterm1,iterm2,。。。

    要點(diǎn):1):逗號(hào)為分隔符,但在輸出時(shí)顯示的是空白符而非逗號(hào)

      (2) :輸出的各iterm可以是字符串、數(shù)值、當(dāng)前記錄的字段、變量或awk的表達(dá)式

      (3):如果省略iterm,相當(dāng)于print$0

eg:

[root@bucktan ~]# tail -5 /etc/passwd | awk -F: '{print "hehe:"111$1,$3}'

hehe:111tcpdump 72

hehe:111bucktan 500

hehe:111centos 496

hehe:111apple 2000

hehe:111zabbix 495

[root@bucktan ~]# tail -2 /etc/passwd | awk -F: '{print}'

apple:x:2000:2000::/home/apple:/bin/bash

zabbix:x:495:492:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin

 6.2 printf命令

     printf - format and print

   格式化輸出:printf FORMAT iterm1,iterm2,...

    要點(diǎn): (1):FORMAT:必須要給出

     (2):不會(huì)自動(dòng)換行,需要顯示給出換行控制符才知道哪行

     (3):FORMAT中需要分別為后面的每個(gè)iterm指定一個(gè)格式化符號(hào)

    格式符:

     %c:顯示字符的ASCII碼

     %d,%i:顯示十進(jìn)制整數(shù)

     %e,%E:科學(xué)計(jì)數(shù)法數(shù)值顯示

     %g,%G:以科學(xué)計(jì)數(shù)法或浮點(diǎn)形式顯示數(shù)值

     %s:顯示字符串

     %u:無(wú)符號(hào)整數(shù)

    %%:顯示%自身

 樣式一

 [root@bucktan ~]# awk -F: '{printf "%s",$1}' /etc/passwd

rootbindaemonadmlpsyncshutdownhaltmailuucpoperatorgamesgopherftpnobodydbususbmuxdvcsarpcrtkitavahi-autoipdabrtrpcusernfsnobodyhaldaemongdmntpapache

 樣式二

 [root@bucktan ~]# awk -F: '{printf "%s\n",$1}' /etc/passwd

root

bin

daemon

adm

lp

樣式三

[root@bucktan ~]# awk -F: '{printf "username: %s\n",$1}' /etc/passwd

username: root

username: bin

username: daemon

username: adm

username: lp

樣式四

[root@bucktan ~]# awk -F: '{printf "username: %s,  userid: %s\n",$1,$3}' /etc/passwd

username: root,  userid: 0

username: bin,  userid: 1

username: daemon,  userid: 2

username: adm,  userid: 3

username: lp,  userid: 4

username: sync,  userid: 5

username: shutdown,  userid: 6

username: halt,  userid: 7

username: mail,  userid: 8

     修飾符:

    #[.#]:第一個(gè)數(shù)字控制顯示的寬度:第二個(gè)#表示小數(shù)點(diǎn)的精度

        如%3.1f

    -:左對(duì)齊  ,不加-為默認(rèn)的右對(duì)齊

    +:顯示數(shù)值的符號(hào)

[root@bucktan ~]# awk -F: '{printf "username: %-15s,  userid: %s\n",$1,$3}' /etc/passwd

username: root      ,  userid: 0

username: bin       ,  userid: 1

username: daemon     ,  userid: 2

##后面內(nèi)容省略

7. 操作符

 ###(也是用在執(zhí)行語(yǔ)句之中的,記得要用分號(hào)與print內(nèi)建命令分開(kāi))

  算術(shù)操作符:

  x+y ,x-y,x*|/|^|%y

  -x:負(fù)值

  +x:轉(zhuǎn)換為數(shù)值

  字符串操作符:沒(méi)有符號(hào)的操作符,字符串連接

  賦值操作符:=,+=,-=,*=,/=,%=,++,--

  比較操作符:>,<,>=,<=,!=,==

  模式匹配符:

     ~:是否匹配

    !~:是否不匹配

  邏輯操作符:&&,||,!

  函數(shù)調(diào)用:function_name()  ,

    若要傳遞參數(shù)使用:function_name(argu1,argu2,。。)

  條件表達(dá)式:selector?if-true-expression:if-false-expression

     selector為條件

      if-true-expression:條件為真的表達(dá)式

      if-false-expression:條件為假的表達(dá)式

eg:

[root@bucktan ~]# awk -F: '{$3>=1000?usertype="common user":usertype="sysuser or root";printf "%10s:%-s\n",$1,usertype}' /etc/passwd

   root:sysuser or root

    bin:sysuser or root

  daemon:sysuser or root

    adm:sysuser or root

    lp:sysuser or root

   sync:sysuser or root

   語(yǔ)法: gawk  [options ] ‘program’ file ...

     program:PATTERN{ACTION STATEMENTS}

8. PATTERN

  (1)empty:空模式,處理文本每一行

  (2):/regular expression/:僅處理能夠被此模式匹配到的行

eg:

[root@bucktan ~]# awk '/^UUID\>/{print}' /etc/fstab

UUID=375e2006-28ec-4d8b-bc90-399b7c0f42f3 /boot          ext4   defaults     1 2

  (3):relational expression:關(guān)系表達(dá)式,結(jié)果有“真”有”假“,結(jié)果為”真“才會(huì)被處理;

      "真":表示結(jié)果為非0值,或者為非空字符串

eg:

[root@bucktan ~]# awk -F: '$3>=1000{print $3}' /etc/passwd

65534

2000

  (4):line ranges 行范圍

       startline,endline:/pat1/,/pat2

       注:支持直接給出數(shù)字

eg:

[root@bucktan ~]# awk -F: '/^root\>/,/^adm\>/{print $1,$3}' /etc/passwd

root 0

bin 1

daemon 2

adm 3

  (5):BEGIN/END

     BEGIN{}:僅在開(kāi)始處理文件中的文本之前執(zhí)行一次

     END{}:僅在文本處理完成之后執(zhí)行一次

[root@bucktan ~]# awk -F: 'BEGIN{print "user    id\n================"}{print $1,$3}END{print "end\n-----------"}' /etc/passwd

user    id

================

root 0

bin 1

daemon 2

adm 3

[root@bucktan ~]# awk -F: 'BEGIN{print "user    id\n================"}{printf "%10-s %10-s\n",$1,$3}END{print "end\n-----------"}' /etc/passwd

user    id

================

root    0

bin     1

daemon   2

adm     3

   語(yǔ)法: gawk  [options ] ‘program’ file ...

     program:PATTERN{ACTION STATEMENTS}

9.常用的action語(yǔ)句(即寫(xiě)在{ACTION STATEMENTS}中的語(yǔ)句)

  a:Expressions

  b:cotrol statements:if ,while 等

  c:compound statements:組合語(yǔ)句

  d:input statements 輸入語(yǔ)句

  e:output statements輸出語(yǔ)句

  9.1 :控制語(yǔ)句

    if(condition) {statements}

    if(condition) {statements} else {statements}

    while(condition) {statements

    do {statements} while(condition)

    for(expr1;expr2;expr3) {statements}

    break

    continue

    delete array[index]

    delete array

    exit

    { statements }

10.細(xì)說(shuō)action語(yǔ)句

 10.1  if -else

     語(yǔ)法: if(condition) statements else [statements]

eg:

[root@bucktan ~]# awk -F: '{if($3>=1000) print $1,$3}' /etc/passwd

nfsnobody 65534

apple 2000

[root@bucktan ~]# awk -F: '{if($3>=1000) {printf "common user: %s\n",$1} else { printf "root or sysuser:%s\n",$1}}' /etc/passwd

root or sysuser:root

root or sysuser:bin

root or sysuser:daemon

root or sysuser:adm

root or sysuser:lp

root or sysuser:sync

 10.2 while 循環(huán)

     語(yǔ)法:while(condition) {statements}

       條件為真進(jìn)入循環(huán)為假退出循環(huán)

   使用場(chǎng)景:對(duì)一行內(nèi)的多個(gè)字段逐一進(jìn)行處理時(shí)使用;對(duì)數(shù)組中各元素逐一處理時(shí)使用

eg:對(duì)/etc/fstab文件中以UUID開(kāi)頭的行的每一個(gè)字段進(jìn)行計(jì)算有多少個(gè)字符,并打印該字符段和字符數(shù)

[root@bucktan ~]# awk '/^UUID/{i=1;while(i<=NF) {print $i,length($i);i++}}' /etc/fstab

UUID=375e2006-28ec-4d8b-bc90-399b7c0f42f3 41

/boot 5

ext4 4

defaults 8

1 1

2 1

 10.3 do-while (先運(yùn)行一次循環(huán)體,在判斷條件)

    語(yǔ)法:do {statements} while(condition)

    意義:可以至少執(zhí)行一次循環(huán)體

 10.4 for循環(huán)

    語(yǔ)法:for(expr1;expr2;expr3) {statements}

eg:

[root@bucktan ~]# awk '/^UUID/{for(i=1;i<=NF;i++){print $i,length($i)}}' /etc/fstab

UUID=375e2006-28ec-4d8b-bc90-399b7c0f42f3 41

/boot 5

ext4 4

defaults 8

1 1

2 1

    特殊用法:

     能夠遍歷數(shù)組中的元素

      語(yǔ)法:for (var in array) {for-body}

 10.5 switch語(yǔ)句

    語(yǔ)法:switch(expression) {case VALUE1 or /REGEXP/:statement;case VALUE2 or /REGEXP/:statement;....;default:statement}

     注:其中之一分支匹配到,則執(zhí)行此分支不執(zhí)行其他分支了

  10.6 break和continue

   break [n]:退出n層循環(huán)

   continue:退出當(dāng)前循環(huán)

 10.7 next 提前結(jié)束對(duì)本行的處理而直接進(jìn)入下一行

eg:

[root@bucktan ~]# awk -F: '{if($3%2!=0) next ;print $1,$3}' /etc/passwd

root 0

daemon 2

lp 4

shutdown 6

 10.7 array

   關(guān)聯(lián)數(shù)組:arry[index-expression]

    index-expression:

     (1):可使用任意字符,字符串要使用雙引號(hào)

     (2):如果某數(shù)組元素事先不存在,在引用時(shí),awk會(huì)自動(dòng)創(chuàng)建此元素,并將其值初始化為“空串”

     若要判斷數(shù)組中是否存在某元素,要使用“index in array”格式進(jìn)行

11:函數(shù)

 11.1:內(nèi)置函數(shù)

    數(shù)值處理:

      rand()::返回0和1之間一個(gè)隨機(jī)數(shù);

   字符串處理:

     length([s]):返回指定字符串的長(zhǎng)度;

     sub(r,s,[t]):以r表示的模式來(lái)查找t所表示的字符中的匹配的內(nèi)容,并將其第一次出現(xiàn)替換為s所表示的內(nèi)容;

     gsub(r,s,[t]):以r表示的模式來(lái)查找t所表示的字符中的匹配的內(nèi)容,并將其所有出現(xiàn)均替換為s所表示的內(nèi)容;

     split(s,a[,r]):以r為分隔符切割字符s,并將切割后的結(jié)果保存至a所表示的數(shù)組中;

~]# netstat -tan | awk '/^tcp\>/{split($5,ip,":");count[ip[1]]++}END{for (i in count) {print i,count[i]}}'

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“awk怎么用”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


新聞標(biāo)題:awk怎么用-創(chuàng)新互聯(lián)
文章出自:http://weahome.cn/article/ccjpgs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部