文本處理三劍客之 AWK

文本處理三劍客之 AWK

  • awk介紹
  • awk基本用法
  • awk變量
  • awk格式化
  • awk操做符
  • awk循環
  • awk數組
  • awk函數
  • 調用系統命令

 

awk介紹

awk是一種報告生成器,格式化文本輸出的工具,也能夠說是模式掃描和處理語言linux

 

awk 基本用法

awk [options] 'program' var=value file...express

awk [options] -f programfile var=value file...數組

awk [options] 'BEGIN{文件處理前}{文件處理中}END{文件處理後}' file...bash

awk -F '分隔符' -v var=value '' file...函數

programBEGIN{文件處理前}{文件處理中}END{文件處理後}工具

 

awk 變量

awk經常使用內置變量 含義 舉例
OFS 輸出時指定的分隔符 ‘BEGIN{OFS="#"}’
RS 輸入時記錄的分隔符  
ORS 輸出時記錄的分隔符  
FILENAME 文件名  
ARGC 參數  
ARGV 參數數組  
$1,$2,$3,$4,...$NF 列內容  
NF 列數量  
NR 記錄號  
FNR 各文件分別記錄號  
$0 每條記錄的內容  

awk 自定義變量: awk -F: -v name="Common User" '$3>=1000{print "user "$1"is "name}' /etc/passwdspa

 

awk格式化

 格式化輸出:printf 「FORMAT」, item1, item2, ...
        (1) 必須指定FORMAT
        (2) 不會自動換行,須要顯式給出換行控制符,\n
        (3) FORMAT中須要分別爲後面每一個item指定格式符
格式符:與item一一對應
        %c:顯示字符的ASCII碼
        %d, %i:顯示十進制整數
        %e, %E:顯示科學計數法數值
        %f:顯示爲浮點數
        %g, %G:以科學計數法或浮點形式顯示數值
        %s:顯示字符串
        %u:無符號整數
        %:顯示%自身
 修飾符
        #[.#] 第一個數字控制顯示的寬度;第二個#表示小數點後精度,%3.1f
        - 左對齊(默認右對齊) %-15s
        + 顯示數值的正負符號 %+dcode

 

awk操做符

 

算術操做符:
        x+y, x-y, x*y, x/y, x^y, x%y
        - x:轉換爲負數
        +x:將字符串轉換爲數值
字符串操做符:沒有符號的操做符,字符串鏈接
賦值操做符:
        =, +=, -=, *=, /=, %=, ^=,++, --
比較操做符:
        ==, !=, >, >=, <, <=
模式匹配符:
        ~:左邊是否和右邊匹配,包含
        !~:是否不匹配ci

邏輯操做符:與&&,或||,非!字符串

條件表達式(三目表達式):  selector?if-true-expression:if-false-expression

 

awk 控制語句

[root@Centos7 ~]# awk -F: -v OFS=" -> " '$3>=1000?username="Common User":username="System User"{print $1,$3,username}' /etc/passwd
[root@Centos7 data]# awk '/^[[:space:]]*linux16/{i=1;while(i<NF){print NR,$i,length($i);i++}}' /etc/grub2.cfg 
[root@Centos7 data]# awk '/^[[:space:]]*linux16/{for(i=1;i<=NF;i++){print NR,$i,length($i)}}' /etc/grub2.cfg
[root@Centos7 data]# awk 'BEGIN{total=0;i=0;do{total+=i;i++}while(i<=100);print total}'

//awk內部命令的輸出結果賦給一個變量直接用「=」號,而不能用``
[root@Centos7 data]# df -h|awk '/^\/dev\//{w=int($(NF-1));if(w>8)print w}'
9
23
相關文章
相關標籤/搜索