awk是一種報告生成器,格式化文本輸出的工具,也能夠說是模式掃描和處理語言linux
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...函數
program:BEGIN{文件處理前}{文件處理中}END{文件處理後}工具
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
格式化輸出: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
算術操做符:
x+y, x-y, x*y, x/y, x^y, x%y
- x:轉換爲負數
+x:將字符串轉換爲數值
字符串操做符:沒有符號的操做符,字符串鏈接
賦值操做符:
=, +=, -=, *=, /=, %=, ^=,++, --
比較操做符:
==, !=, >, >=, <, <=
模式匹配符:
~:左邊是否和右邊匹配,包含
!~:是否不匹配ci
邏輯操做符:與&&,或||,非!字符串
條件表達式(三目表達式): selector?if-true-expression:if-false-expression
[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