Linux GNU AWK使用

                                Linux GNU AWK使用

本章內容:

awk介紹

awk基本用法

awk變量

awk格式化

awk操作符

awk條件判斷

awk循環

awk數組

awk函數

調用系統命令

 

文本處理三工具: grep、sed、awk

grep:文本過濾工具;

sed:行編輯器;

awk:報告生成器,格式化文本輸出;

  awkAho Weinberger Kernighan,報告生成器,格式化文本輸出。

  awk:有多重版本:New awk nawkGNU awk gawk)。

  gawk – 模式掃描和處理語言。

       gawk [ POSIX or GNU style options ] -f program-file [ — ] file …

       gawk [ POSIX or GNU style options ] [ — ] program-text file …

       pgawk [ POSIX or GNU style options ] -f program-file [ — ] file …

       pgawk [ POSIX or GNU style options ] [ — ] program-text file …

awk程序通常由:BEGIN語句塊、能夠使用模式匹配的通用語句塊、END語句塊,共3部分組成。

      program:通常使用單引號(’’)把{}引起來。

awk基本用法:

     gawk [option] program FILE…….

     programPATTERN{ACTION STATEMENTS} 語句之間用分號分隔;

     選項:

         -F:指明輸入時用到的字段分隔符;默認以空白作為分隔符。

         -vvar=value 自定義變量。

 

     print:  item=字段的意思。

           1)多個item之間使用“,”逗號分隔。

           2)輸出的各item可以是字符,也可以是數值,變量或awk的表達式。

           3)如果省略item$1…)相當于print $0 整行的內容。

     printf:可以調整文本的寬度,間隔等,比print功能要強。

     

     分隔符、域和記錄:

           awk執行時,由分隔符分隔的字段(域)標記$1 $2 …..$n稱為域標識。$0為所有域,代表整個文件。

     注意:awk中的$符和shell中的$符含義是不同的。

     文件的每一行稱為記錄。

     省略action,則默認執行print $0 的操作。

 

awk的工作原理:

     第一步:執行BEGIN{action;…..}語句塊中的語句。

        示例:

          [root@centos6 Desktop]# awk 'BEGIN{print "hello world"}'

          hello world

          [root@centos6 Desktop]#

 

     第二部:從文件或標準輸入(stdin)讀取一行,然后執行pattern{action;…..}語句塊,它逐行掃描文件,從第一行到最后一行重復這個過程,直到文件全部被讀取完畢。

         示例:

          [root@centos6 Desktop]# awk -F: '{print "username:"$1\t"uid:"$3}' /etc/passwd

          username:root uid:0

          username:bin uid:1

          username:daemon uid:2

          username:adm uid:3

          ………………………………

          [root@centos6 Desktop]#

 

     第三部:當讀取完文件時,執行END{action….}語句塊。

     BEGIN語句塊在awk開始讀取文件行之前被執行,這是一個可選的語句塊,比如變量初始化、打印輸出表格的表頭等語句通??梢詫懺?/span>BEGIN語句塊中。

     END語句塊在awk讀取完文件行之后被執行,比如打印所有行的分析結果這類信息匯總都是在END語句塊中完成,它也是一個可選的語句塊。

     pattern語句塊中的通用命令是最重要的部分,也是可選的。如果沒有提供pattern語句塊,則默認執行{print},即完整打印每一個讀取到的行,awk讀取到的每一行都會執行該語句塊。

 

     -v選項的變量:

       1)內建變量:input

              FS:指明列分隔符,(類似于cut中的f),默認以空白字符作為分隔符。

                  [root@centos6 ~]# awk  -v  FS=":" '{print $1}' /etc/passwd

 

              OFS:指明輸出字段的分隔符,默認以空白字符作為分隔符。

                  [root@centos6 ~]# awk -v FS=":" -v OFS="=" '{print $1,$3,$6}' /etc/passwd

 

              RS:指明換行分隔符,指定輸入時的換行符,原換行符仍有效。

                   awk -v RS=" "  '{print}' /etc/passwd

 

              ORS:指明以什么代替回車換行符,輸出時用指定的符號代替換行符。

                   awk -F: -v ORS="########" '{print $1,$2 }'  /etc/passwd

                   root x##############bin x##############daemon x

 

              NF:顯示每行的字段總數。

                1、

                  [root@centos6 Desktop]# awk -F: '{print NF}' /etc/passwd

                     7

                     7

                     7

                     ……………………….

                     [root@centos6 Desktop]#

                   2

                     [root@centos6 Desktop]# awk -F: '{print $(NF-6)}' /etc/passwd

                     root

                     bin

                     daemon

                     [root@centos6 Desktop]#

              

              NR:顯示行號。

                1、

                  [root@centos6 Desktop]# awk -F: '{print NR,$1}' /etc/passwd

                     1 root

                     2 bin

                     3 daemon

                     4 adm

                     [root@centos6 Desktop]#

                  2

                     [root@centos6 Desktop]# awk -F: END'{print NR,$1}' /etc/passwd

                     38 named

                     [root@centos6 Desktop]#

        

              FNR:各文件分別計數,統計行號。

                   [root@centos6 Desktop]#  awk '{print FNR, $0}' /etc/issue  /etc/issue

                   1 CentOS release 6.8 (Final)

                   2 Kernel \r on an \m

                   3

                   1 CentOS release 6.8 (Final)

                   2 Kernel \r on an \m

                   3

                   [root@centos6 Desktop]#

 

              FILENAME:顯示當前文件名。

                   [root@centos6 Desktop]#  awk '{print FILENAME, $0}' /etc/issue

                      /etc/issue CentOS release 6.8 (Final)

                      /etc/issue Kernel \r on an \m

                      /etc/issue

                      [root@centos6 Desktop]#

             

              ARGC:顯示命令行參數的個數。

                   [root@centos6 Desktop]# awk BEGIN'{print ARGC}'  /etc/fstab /etc/issue

                       3

                      [root@centos6 Desktop]#

 

              ARGV:數組,保存的是命令行所給定的各參數。

                  0、

                      [root@centos6 Desktop]# awk '{print ARGV[0]}' /etc/fstab /etc/issue

                      awk

                     1、

                      [root@centos6 Desktop]# awk '{print ARGV[1]}' /etc/fstab /etc/issue

                      /etc/fstab

                     2、

                      [root@centos6 Desktop]# awk '{print ARGV[2]}' /etc/fstab /etc/issue

                      /etc/issue

 

         2)自定義變量:

                 1-v  var=value (變量名區分字符大小寫)

                 2)在program中直接定義

   

            示例:

          1[root@centos6 ]# awk -F: -v name=username '{print name,$1 }'    /etc/passwd

               username root

               username bin

               username daemon

               ………………………………..

          2、[root@centos6 ]# awk -F: '{name="username";print name,$1}' /etc/passwd

               username root

               username bin

               username daemon

               ………………………………..

 

 

printf命令:

       格式化輸出:printf FORMAT”,item1item2

          1)必須指定FORMAT。

          2)不會自動換行,需要顯示給出換行控制符,\n。

          3FORMAT中需要分別為后面每個item指定格式符。

        

       格式符:與item一一對應:

            %c:顯示字符的ASCII碼;

            %d,%i:顯示十進制整數;

            %e,%E:顯示科學計數法數值;

            %f:顯示為浮點數;

            %g%G:以科學計數法或浮點形式顯示數值;

            %s:顯示字符串;

            %u:無符號整數;

            %%:顯示%本身;

 

       修飾符:

            #[.#]:第一個數字控制顯示的寬度,第二個#表示小數點后精度,例:%3.1f

            –:左對齊(默認右對齊)%-10s

            +:顯示數值的正負符號%+10d

          

       示例:

             1、 以右對齊20個字打印/etc/passwd的第一個字段,以左對齊10個字符打印/etc/passwd的第二個字段。

                 [root@centos6 ]# awk -F: '{printf "%20s======== %-10d\n" ,$1,$2}' /etc/passwd

                 root======== 0         

                 bin======== 0         

                 daemon======== 0         

                 adm======== 0  

            2

                [root@centos6 ]# awk -F: '{printf "nameuser:%-15s===== uid:%d\n",$1,$3}' /etc/passwd

                 nameuser:root           ===== uid:0

                 nameuser:bin            ===== uid:1

                 nameuser:daemon         ===== uid:2

 

算數操作符:

      +(加)、(減)、*(乘)、/(除)、^(次冪)、%(取模運算) 

        示例:

         [root@centos6 Desktop]# awk BEGIN'{print 10^10}'

           10000000000

          [root@centos6 Desktop]#

 

賦值操作符:

     =+=、-=、*=/=、%=、%=、++

       示例:

           [root@centos6 ~]# awk -v i=1 BEGIN'{print i+=5}'

         6

         [root@centos6 ~]# awk -v i=1 BEGIN'{print i*=5}'

         5

         [root@centos6 ~]# awk -v i=10 BEGIN'{print i/=5}'

         2

         [root@centos6 ~]# awk -v i=10 BEGIN'{print i++}'

         10

         [root@centos6 ~]# awk -v i=10 BEGIN'{print ++i}'

         11

         [root@centos6 ~]# awk -v i=10 BEGIN'{print –i}'

         9

         [root@centos6 ~]# awk -v i=10 BEGIN'{print i++,i}'

         10 11

         [root@centos6 ~]#

 

 比較操作符:

      > 、>= 、< <=、!===

 

      示例:

       1、[root@centos6 ~]# awk -F: '$3<=2 {print $1}' /etc/passwd

          root

          bin

          daemon

          [root@centos6 ~]#

       2、[root@centos6 ~]# awk -F: '$3>0 {print $1,$3}' /etc/passwd

       3[root@centos6 ~]# awk -F: '$3==0 {print $1}' /etc/passwd

           root

           [root@centos6 ~]#

       4、[root@centos6 ~]# awk -F: '$3>0 && $3<5{print $1}' /etc/passwd

           bin

           daemon

           adm

           lp

           [root@centos6 ~]#

 

 模式匹配符:

     ~:左邊匹配包含右邊的全部顯示出來;

     !~:左邊和右邊不匹配的全部顯示;

 

   示例:

      1、行中包括root字符的全部顯示出來。

         [root@centos6 ~]# awk '$0~"root"{print $0}' /etc/passwd

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

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

       [ root@centos6 ~]#

      2、除了上面兩行顯示的內容,都顯示出來。

       [root@centos6 ~]# awk '$0!~"root"{print $0}' /etc/passwd

     3、在/etc/passwd中第一字段包含以root開頭的顯示出來。

        [root@centos6 ~]# awk -F: '$1~"^root"{print $1}' /etc/passwd

        root

        [root@centos6 ~]#

 

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

     示例:

      1、[root@centos7 Desktop]# awk -F: '$3==0 || $3==1000{print $1}' /etc/passwd

          root

          zheng

         [root@centos7 Desktop]#

      2[root@centos7 Desktop]# awk -F: '$3>0 && $3<=5{print $1}' /etc/passwd

          bin

         daemon

         adm

         lp

         sync

         [root@centos7 Desktop]#

      3、[root@centos7 Desktop]# awk -F: '!($3>0){print $1}' /etc/passwd

          root

          [root@centos7 Desktop]#

 

條件表達式:(三目表達式):

       selector?if-true-expression:if-false-xepression

 

       示例:

       [root@centos7]#awk-F:'$3>1000?username="commonuser":username="sysuser"{printf "%-20s %-10s===== %d\n",username, $1,$3}' /etc/passwd

 

awk pattern

pattern:根據pattern條件,過濾匹配到的行,在做處理。

 1)如果未指定pattern:空模式,匹配每一行。

 2/regular expression/:僅處理能夠匹配到的行,需要用/  /括起來。

 3/regular expression/:關系表達式,結果有“真”有“假”,結果為“真”才會被處理。     

   真:結果為非0值,非空字符串;

   假:結果為空字符串或0值;

 4line ranges:行范圍。

      startline,endline/pattern1/,/pattern2/不支持直接給出數字格式。

 5BEGINEND模式:

      BEGIN{}:僅在開始處理文件中的文本之前執行一次。

      END:僅在文本處理完成之后執行一次。

 

示例:

 1、[root@centos7 Desktop]# awk '/^UUID/{printf "%s\n", $1}' /etc/fstab

   UUID=2de5de7c-8ba6-4ce3-a56f-71ddc0e51765

   UUID=fe32016e-a798-4b03-91a1-55adfd9a4355

   UUID=f51b97fa-1ced-4ef0-9635-3d6d8f6feb5e

   UUID=2bb4030e-68e8-4640-a3ac-62b98c029967

   [root@centos7 Desktop]#

2、取反:[root@centos7 Desktop]# awk '!(/^UUID/){printf "%s\n", $0}' /etc/fstab

3、[root@centos7 Desktop]# awk '!0' /etc/passwd (為“真”可以打印/etc/passwd文件)

4、[root@centos7 Desktop]# awk '!1' /etc/passwd(為“假”不進行打印)

       [root@centos7 Desktop]#

    5、[root@centos7 Desktop]# awk -F: '$NF=="/bin/bash"{print $1,$NF}' /etc/passwd

       root /bin/bash

       zheng /bin/bash

       yibo /bin/bash

       mage /bin/bash

       [root@centos7 Desktop]#

 

示例:line ranges:行范圍。

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

    root

    bin

    daemon

    adm

    [root@centos7 Desktop]#

   2、[root@centos7 Desktop]# awk -F: 'NR>=10&&NR<=15{print $1}' /etc/passwd

    operator

    games

    ftp

    nobody

    dbus

    polkitd

    [root@centos7 Desktop]#

       

示例:BEGIN/END模式:

 [root@centos7 Desktop]# awk -F: 'BEGIN{print "username  uid"}NR>=10&&NR<=20{printf "%-15s========= %-10d\n",$1,$3}END{print  "end file"}' /etc/passwd

  

 awk奇數偶數總結:

    示例:

  [root@centos7 Desktop]# seq 2 | awk 'i=0'

  [root@centos7 Desktop]# seq 2 | awk 'i=1'

  1

  2

  [root@centos7 Desktop]# seq 2 | awk 'i=!i'

  1

  [root@centos7 Desktop]# seq 2 | awk '!(i=!i)'

  2

  [root@centos7 Desktop]# seq 4 | awk '{i=!i;print i}'

  1

  0

  1

  0

  [root@centos7 Desktop]#

 

使用awk取文件的奇數行:

     示例:

       [root@centos7 Desktop]# awk 'NR%2{print NR,$1}' /etc/fstab

       1

       3 #

       5 #

       7 #

       9 UUID=2de5de7c-8ba6-4ce3-a56f-71ddc0e51765

         11 UUID=f51b97fa-1ced-4ef0-9635-3d6d8f6feb5e

         13 /dev/sdb1

         [root@centos7 Desktop]#

 

使用awk取文件的偶數行:

     示例:

       [root@centos7 Desktop]# awk '!(NR%2){print NR,$1}' /etc/fstab

       2 #

       4 #

       6 #

       8 #

      10 UUID=fe32016e-a798-4b03-91a1-55adfd9a4355

      12 UUID=2bb4030e-68e8-4640-a3ac-62b98c029967

      [root@centos7 Desktop]#

 

awk action

   常用的action分類:

1expressions:算術,比較表達式;

2control statementsifwhile等;

3compound statements:組合語句;

4input statements

5output statementprint

 

awk控制語句if-else

語法:{ifconditionstatement [else statememt]}

      {ifcondition1{statement1}else if (condition2){statement2} else{statement3}}

 

    示例:

  1、查找/etc/passwd文件,如果$3是大于等于1000的行,然后打印$1、$3

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

     nfsnobody 65534

     zheng 1000

     yibo 1001

     mage 1002

     [root@centos7 ~]#

 

 2、查找/etc/passwd文件中,如果$7段中等于/bin/bash,然后打印$1S

    [root@centos7 ~]# awk -F: '{if($NF=="/bin/bash"){print $1}}' /etc/passwd

    root

    zheng

    yibo

    mage

    [root@centos7 ~]#

 

 3、查找出/etc/fstab文件中字段數大于5的行;

   [root@centos7 ~]# awk '{if(NF>5){print $0}}' /etc/fstab

 

 4、查找/etc/passwd文件中,如果$3大于等于1000,則打印common user并打印$1,否則打印root or sysuser 并打印$1。

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

 

 5、使用awk中的ifelse if、else判斷語句:

     awk -v test=100 'BEGIN{print test;if(test>90){print "very good"}else if(test>70){print "good"}else {print "no pass"}}'  (因為代碼后沒有別的參數了,說以前面要執行BEGIN

 

awk 控制語句while循環:

語法 {whilecondition{statement}}

條件為“真”進入循環,條件“假”退出循環;

使用場景:

    對行內的多個字段行逐一處理時使用;

    對數組中的各元素逐一處理時使用;

   

示例:

 1、使用while循環打印出/etc/grub2.cfg中的,以空格linux16開頭的行的字段和字段的字符長度。

   awk '/^[[:space:]]+linux16/{i=1;while(i<=NF){print $i,length($i);i++}}' /etc/grub2.cfg

 

 2、使用while循環打印出/etc/grub2.cfg中的,以空格linux16開頭的行的字段和字段的字符長度大于等于10的。

    awk '/^[[:space:]]+linux16/{i=1;while(i<=NF){if(length($i)>=10)print $i,length($i);i++}}' /etc/grub2.cfg

 

awk控制語句do-while循環:

語法:do{statement}whilecondition

意義:無論真假,至少執行依次循環體。

 

示例:

  1、使用do-while語句執行1加到100sum

     awk 'BEGIN{sum=0;i=0;do{sum+=i;i++;print i,sum}while(i<=100){print sum}}'

 

  2、測試執行命令花費的時間:

     [root@centos7]# time awk 'BEGIN{sum=0;i=0;do{sum+=i;i++;print i,sum}while(i<=100){print sum}}'

 

awk 控制語句for循環:

語法:forexpr1;expr2expr3{statement}

特殊用法:能夠遍歷數組中的元素;

 

示例:使用for循環打印出/etc/grub2.cfg中的,以空格linux16開頭的行的字段和字段的字符長度。

  awk '/^[[:space:]]+linux16/{for(i=1;i<=NF;i++){print $i,length($i)}}' /etc/grub2.cfg

 

性能比較:

可以使用time命令測試一條命令執行的時間長短:

 

  示例:測試seq 1加到100所用的時間;

    [root@centos7 Desktop]# time seq -s "+" 100 >> /dev/null |bc

 

    real 0m0.006s

    user 0m0.001s

    sys 0m0.008s

    [root@centos7 Desktop]#

 

awk 控制語句 switch語句:

    

語法:switch(expression) {case VALUE1 or /REGEXP/: statement; case VALUE2 or /REGEXP2/: statement; …; default: statement}

breakcontinue以及next的用法:

 

示例:

1、計算100以內所有奇數的和。

     awk 'BEGIN{sum=0;for(i=1;i<=100;i++){if(i%2==0){continue}sum+=i;print sum}}'

  

2、計算150的和:

       awk 'BEGIN{sum=0;for(i=1;i<=100;i++){if(i>50){break}sum+=i;print sum}}'

 

3、打印/etc/passwd文件中的偶數行:

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

 

awk數組:

1)可以使用任意字符串,字符串要使用雙引號括起來。

2)如果某數組元素事先不存在,在引用時,awk會自動創建此元素,并將其值初始化為“空”。

3)若要判斷數組中是否存在某元素,要使用index in array格式進行遍歷。

4)若要遍歷數組中的每個元素,要使用for循環。

 

示例:

    1、創建數組并打印數組中的某個元素。

         awk 'BEGIN{jiaotong["a"]="huoche";jiaotong["b"]="feiji";jiaotong["3"]="qiche";print jiaotong["3"]}'

 

    2、去除文件中重復的行:

       awk ‘!arr[$0]++’  file

    

        3、遍歷數組中的每個元素。

        # awk 'BEGIN{jiaotong["a"]="huoche";jiaotong["b"]="feiji";jiaotong["3"]="qiche";print jiaotong["3"];for(i in jiaotong)print jiaotong[i]}'

          qiche

          huoche

          feiji

          qiche

          [root@centos7 Desktop]# 

 

       4、查看文件中每行重復出現的次數。

          [root@centos7 ~]# awk '{!stat[$0]++}END{for(i in stat)print i,stat[i]}' f1

            aaaa 2

            11111111 2

            bbbbbbbbbb 2

            cmslcml, 1

            [root@centos7 ~]#

       

            [root@centos7 ~]# cat f1 |uniq -c

            2 aaaa

            2 bbbbbbbbbb

            2 11111111

            1 cmslcml,

            [root@centos7 ~]#

  

       5、查看/var/log/httpd/access_log文件中IP地址鏈接的次數。

          [root@centos6 Desktop]# awk '{stat[$1]++}END{for(i in stat)print i,stat[i]}'    /var/log/httpd/access_log

          10.1.252.238 3

          [root@centos6 Desktop]#

 

             awk '{line[$0]++}END{for(i in line)print i ,line[i]}'  /etc/fstab

 

awk 函數:

數值處理:

    rand():返回01之間一個隨機數;

   srand():隨機數種子;

    int:整數;

     示例:

       1、生成5100以內隨機的5個整數;

         [root@centos7 ~]# awk 'BEGIN{srand();for(i=1;i<=5;i++)print int(rand()*100)}'

         26

         50

         21

         95

         59

           [root@centos7 ~]#

 

   length():返回指定字符串的長度。

   subrs):搜索r表示的模式匹配的內容,并將第一個匹配的內容替換為s。

     示例:sub只替換搜索到的第一個匹配的內容。

       [root@centos7 ~]# echo "2008:08:08 08:08:08" | awk 'sub(/:/,"-")'

       2008-08:08 08:08:08

       [root@centos7 ~]#

   gsubrs):搜索r表示的模式匹配的內容,并全部替換為s所表示的內容。

      示例:

       [root@centos7 ~]# echo "2008:08:08 08:08:08" | awk 'gsub(/:/,"-")'

        2008-08-08 08-08-08

        [root@centos7 ~]#

   splitsarray,“r”):以r代表分隔符,切割字符s,并將切割后的結果保存至array所表示的數組中,第一個索引值為1,第二個索引值為2………

    示例:

    [root@centos7 ~]# echo "2008:08:08 08:08:08" | awk 'split($0,num,":"){print num[1]}'

    2008

    [root@centos7 ~]# echo "2008:08:08 08:08:08" | awk 'split($0,num,":"){print num[3]}'

    08 08

    [root@centos7 ~]#

   

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

 

awk中調用shell命令:

     system命令:

        空格是awk中的字符串鏈接符,如果system中需要使用awk中的變量可以使用空格分隔,或者說除了awk的變量外其他一律用“”應用起來。

        示例:

          [root@centos7 ~]# awk 'BEGIN{system("hostname")}'

            centos7

            [root@centos7 ~]# awk 'BEGIN{test=100;system("echo " test)}'

            100

            [root@centos7 ~]#

 

awk腳本:

awk程序寫成腳本,直接調用執行。

       [root@centos7 bin]# cat uid.awk

       #!/bin/awk -f

       #this is a awk scripts

 

     {if($3>=1000)print $1,$3}

     [root@centos7 bin]# uid.awk -F: /etc/passwd

     nfsnobody 65534

     zheng 1000

     yibo 1001

     mage 1002

     [root@centos7 bin]#

 

awk腳本中傳遞參數:

      [root@centos7 bin]# cat uid.awk

      #!/bin/awk -f

      #this is a awk scripts

 

      {if($3>=min && $3<=max)print $1,$3}

      [root@centos7 bin]# uid.awk -F: min=100 max=200 /etc/passwd

      usbmuxd 113

      rtkit 172

      qemu 107

      abrt 173

      avahi-autoipd 170

      pulse 171

      [root@centos7 bin]#

 

練習:

  1、統計/etc/fstab文件中每個單詞出現的次數:

      [root@centos7 bin]# awk '{for(i=1;i<=NF;i++){count[$i]++}}END{for(i in count){print i,count[i]}}' /etc/fstab  

 

  2、統計/etc/fstab文件中每個文件系統類型出現的次數:

     [root@centos7 bin]# awk '/^UUID/{fs[$3]++}END{for(i in fs)print i,fs[i]}' /etc/fstab

      swap 1

      xfs 3

      [root@centos7 bin]#

  

 

 

  

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

 

 

 

 

       

 

           

 

 

 

 

 

 

 

 

       示例:

        使用awk的“-F”選項指明以“:”作為列分隔符,取出/etc/passwd中第一個字段

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

          root

          bin

          daemon

          adm

          lp

          ……………………………….

          [root@centos6 ~]#

        使用awk的“-v”選項指明以“:”作為列分隔符,取出/etc/passwd中第一個字段

          [root@centos6 ~]# awk -v FS=":" '{print $1}' /etc/passwd

          root

          bin

          daemon

          adm

          lp

          ……………………………….

          [root@centos6 ~]#

         使用awk的“-v”選項指明以“:”作為列分隔符,輸出時指定以“=”作為列分隔符,取出/etc/passwd中第一、第三、第六個字段等。

         [root@centos6 ~]# awk -v FS=":" -v OFS="=" '{print $1,$3,$6}' /etc/passwd

         root=0=/root

         bin=1=/bin

         daemon=2=/sbin

         adm=3=/var/adm

         lp=4=/var/spool/lpd

         ……………………………….

         [root@centos6 ~]#

      示例:

      RS指明行的換行分隔符,指定輸入時的換行符,原換行符仍有效。

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

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

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

          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

          ……………………………….

          [root@centos6 ~]#

 

 

 

 

 

 

 

 

 

 

原創文章,作者:zhengyibo,如若轉載,請注明出處:http://www.www58058.com/49777

(0)
zhengyibozhengyibo
上一篇 2016-09-30 13:06
下一篇 2016-10-01 23:46

相關推薦

  • HA專題: corosync+pacemaker實現nginx高可用

    HA專題: corosync+pacemaker實現nginx高可用 前言 實驗介紹 實驗拓撲 實驗環境 實驗步驟 準備工作 安裝HA集群組件 安裝nginx和配置nfs 使用crmsh配置集群資源 測試 總結 前言 這幾天都會學習高可用集群, 也會將其中的一些實驗寫出來分享給大家, 這個專題估計會寫5篇左右, p.s: 寫博客很累的 實驗介紹 這次的實驗比…

    Linux干貨 2016-04-11
  • 關于 磁盤、文件系統管理

                   磁盤、文件系統管理               1  設備識別2  設備分區3 …

    系統運維 2016-08-30
  • 優云Monitor:開啟數據中心主機運維的上帝視角

    常常有這么一句話在激勵每一位運維人員,“不以故障多為恥,而以恢復快為榮。”運維人員就是要快速定位問題,分析問題,排除故障,快速恢復來保障生產業務不受中斷。然而,現代大型數據中心,運維人員要管理的系統節點比以前繁多,為了掌控數據中心的實時運行情況與定位問題,需要花的時間成本已經長得無法接受。 而優云Monitor給運維人員提供了極好的可視化手段,能夠讓運維人員…

    系統運維 2017-01-09
  • 基于Cobbler實現多版本操作系統自動部署

    前言     在生產環境中,當需要批量部署幾十甚至上百臺服務器時,實現自動化安裝操作系統尤為重要,按照傳統的光盤引導安裝是不可想象的;此前我們通過pxe+kickstart簡單實現了自動化安裝,但只能實現單一版本安裝,當需要部署不同版本或不同引導模式(BIOS、EFI)時,此種方式就不夠靈活。而Cobbler正是為了解…

    Linux干貨 2015-08-11
  • Linux pxe服務

                     Linux pxe服務 pex工作過程:   客戶機從自己的pxe網卡啟動,向本網絡中的DHCP服務器請求IP地址及子網掩碼,此時DHCP服務器返回分給客戶機的IP地址和子網掩碼,并告知客戶機bootstrap文件的…

    系統運維 2016-11-18
  • 開機啟動流程

    grub and boot Centos5,6的開機啟動流程 grub Centos7的開機啟動流程 Centos5,6的開機啟動流程 initrd / initramfs 一般存儲在/boot目錄下,以.img為結尾的文件,是一個小型的根目錄系統的映像文件,里面存放了各類系統必須的模組,為了解決內核在加載完成之后沒有模組無法訪問磁盤加載rootfs的問題。…

    Linux干貨 2016-04-11
欧美性久久久久