awk工具的使用

awk是一個文本處理器,主要用於格式化文檔輸出html

awk命令express

  1. 格式:awk [option] ‘program’ file (命令,選項,命令主體,文件)
    命令主體部分:[/模式/]{動做} (命令主體部分應該用單引號引發來)
    模式部分無關緊要:是用來決定什麼時候觸發awk,以及怎麼觸發
    動做部分:決定怎麼處理數據,須要將動做放到"{ }"中
    選項部分:
    -f,--file program-file:從指定的文件中加載program語句塊,而不是經過命令行給出相關的程序內容;
    -F,--field-separator fs:指定字段的輸入分隔符;默認是空白字符;
    -v,--assign var=val:用於聲明自定義變量併爲變量賦值;數組

    1. awk中的一些概念:
      a.分隔符:
      輸入分隔符:awk處理數據時,會根據特定的標識符號把數據分段,這種標識符就是輸入分隔符,默認爲空白符
      輸出分隔符:將數據處理完成後,會用分隔符將這些分段的數據鏈接起來,這樣的分隔符叫輸出分隔符;默認也爲空白符;bash

      b.記錄
                      awk處理數據時,用換行符分開的每一行就是一個記錄,一般用$0表示
              c.字段
                      awk用分隔符將一個記錄分紅若干個字段,字段分別用$1,$2,$3,....$NF表示($NF用來表示最後一個字段)

      3.awk的工做原理:
      1.awk首先會執行BEGIN{動做。。。}語塊中的語句
      2.awk而後會執行/模式/{動做。。。}語塊內的語句
      3.awk最後會執行END{動做。。。}語塊內的語句
      注意:
      1) BEGIN語句塊在awk開始處理數據內容以前就被執行;一般用於生成表頭;此語句塊是可選語句塊;
      2) END語句塊在處理完全部的數據以後,纔會被執行;一般用於數據彙總;此語句塊是可選語句塊;
      3)/模式/ {動做}語句塊特別重要,其模式語句塊不能省略,可是其動做語句能夠省略,若省略默認執行print命令
      4.awk的用法
      內建變量:(awk本身定義的變量,每一個變量都有其不一樣的功能)
      FS:輸入字段分隔符,默認空白符ide

      [root@bogon html]# awk -v FS=: '{print $1,$2}' /etc/passwd
      root x
`使用 : 做爲分隔符而且輸出第一第二字段,注意變量必須使用 -v 聲明
                            OFS:輸出字段分隔符,默認空白符

[root@bogon html]# awk -v FS=: -v OFS="--" '{print $1,$2}' /etc/passwd
root--x命令行

```修改輸出分隔符
RS:輸入換行符,用來分隔記錄的code

[root@bogon html]# awk -v RS="/" '{print $0}' /etc/passwd
root:x:0:0:root:
root:
bin
bash
ORS:輸出換行符,用來決定記錄如何輸出
[root@bogon html]# awk -v ORS="------" '{print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash------bin
NF:每一行字段的總數
root@bogon html]# awk -F : '{print NF}' /etc/passwd
7
//顯示一行內字段的總數
[root@bogon html]# awk -F : '{print $NF}' /etc/passwd
/bin/bash
//顯示最後一個字段
NR:行的總數,能夠看作每一行的行號
[root@bogon html]# awk -F : '{print NR}' /etc/passwd
1
2
3
//顯示各行的行號
[root@bogon html]# awk -F : '{print $NR}' /etc/passwd
root    //第一行的第一個記錄
x        //第二行的第二個記錄 
2
4
lp
/sbin
/sbin/shutdown       //第七行的第七個記錄
//能夠看出NR是根據行變化而變化的
FNR:能夠處理多個文件,並分別顯示他們的行

                FILENAME:正在被處理的文件的文件名字
[root@bogon html]# awk  '{print FILENAME}' /etc/passwd
/etc/passwd
/etc/passwd
//由於awk是一行一行的處理文本的,因此爲了不重複,咱們可使用END{動做}來總結
ARGC:命令行內參數的數量
[root@bogon html]# awk 'END{print ARGC}' /etc/passwd
2
//包括awk命令自己,但不包括awk命令的選項部分和program部分 因此爲2
ARGV:由命令行參數構成的數組
[root@bogon html]# awk 'END{print ARGV[1]}' /etc/passwd
/etc/passwd
[root@bogon html]# awk 'END{print ARGV[0]}' /etc/passwd
awk
4.自定義變量
                        定義方式 -v 名字=值
                        示例
[root@bogon html]# awk -v var=www -F : '{print $1,var}' /etc/passwd
root www
//注意:在引用變量時不須要添加$符號,不然引用的是$0

4.常見的動做
print:以標準的格式輸出 ‘’{print itm1,itm2}‘’
注意:各item之間用逗號隔開
item能夠是數字,字符串,變量,字段,還能夠是awk的表達式
默認的item是$0
若各item用空格隔開或沒隔開,則輸出的結果將不會有輸出分隔符htm

printf:格式化輸出  '{printf "格式" item1,item2...}'
                注意:printf的格式沒有自動換行,因此須要在格式末尾添加\n
                                    printf必須給出格式
                                    "格式"須要爲後面的每個item單獨指定一個格式化符號,若不指定則不會輸出未指定的那一列
                                    格式與item也須要使用逗號隔開
                常見的格式:
                            %c:以ASCII碼錶中的內容顯示字符信息;
                        %d, %i:顯示十進制整數;
                        %e, %E:以科學計數法來顯示數字;浮點類型;
                        %f, %F:顯示十進制數字的浮點形式;
                        %g, %G:以科學計數法顯示浮點數字;
                        %u:顯示無符號十進制數;
                        %s:顯示字符串;
                        %x, %X:顯示無符號的十六進制整數;
                        %%:顯示%;
                        #[.#]:第一個數字用來控制顯示寬度;第二個數字表示小數點的精度;
                            如:%5s, $8.3f
                            -:表示採用左對齊方式顯示;默認是右對齊;
                        +:顯示數字的正負符號;
[root@bogon html]# awk -F: '{printf "%20s : %3s :%-+10s\n",$1,$2,$3}' /etc/passwd
                root :   x :0         
                 bin :   x :1 
    //注意:#【.#】  +  -  ,也應該放到%後面

5.操做符:
算術運算操做符:
雙目運算符:
x+y, x-y, x*y, x/y, x^y, x%y文檔

[root@bogon html]# awk 'END{print 5-4,5^2}' /etc/passwd
1 25
單目運算符:
                        -x:將正整數轉換爲負整數;
                        +x:將字符串轉換爲數值;

                字符串操做符:
                    無任何操做符號時,即爲字符串鏈接操做;

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

                比較操做符:
                    ==, !=, >, >=, <, <=
[root@bogon html]# awk -F: '$3==1{print $1}' /etc/passwd
bin
//如果字符串比較須要加引號
模式匹配操做符:
                    ~:操做符左側的字符串是否可以被右側的PATTERN所匹配;
                    !~:操做符左側的字符串是否不能被右側的PATTERN所匹配;
[root@bogon html]# awk -F: '$1~/root/{print $1,$3}' /etc/passwd
root 0
//PATTERN須要用雙斜線擴住
邏輯運算操做符:
                    &&
                    ||
                    !
                    示例:
                        ~]# awk -F: '$3>=1000&&$3<=1100{print $0}' /etc/passwd

                條件表達式:
                    selector(condition)?if-true-expression:if-false-expression
[root@bogon html]# awk -F: '{$1=="root"?type="super":type="laji";print $1,type}' /etc/passwd
root super
bin laji
//注意:變量賦值加引號

6.program的模式部分
1.啥也不寫:處理每一行
2.模式內輸入一些,內容或者關係表達式,能夠在前面加入!選擇不匹配
3.能夠用NR的範圍肯定行的範圍
4.倆個模式用逗號隔開,能夠匹配範圍內行字符串

相關文章
相關標籤/搜索