awk的簡單用法
阿新 • • 發佈:2018-04-01
awk目錄
1.awk的基本格式
2.awk中的變量
3.操作符
1.awk的基本格式
2.awk中的變量
3.操作符
一.awd的基本格式
awk [options] ‘program‘ file…
program:pattern{action statements;..}
pattern和action:
?pattern部分決定動作語句何時觸發及觸發事件 BEGIN,END
? action statements對數據進行處理,放在{}內指明 print, printf
- 分割符、域和記錄
awk執行時,由分隔符分隔的字段(域)標記$1,$2..$n稱 為域標識。$0為所有域。
文件的每一行稱為記錄。
省略action,則默認執行 print $0 的操作。 - 工作原理
- 第一步:執行BEGIN{action;… }語句塊中的語句
- 第二步:從文件或標準輸入(stdin)讀取一行,然後執行pattern{ action;… }語句塊,它逐行掃描文件,從第一行到最後一行重復這 個過程,直到文件全部被讀取完畢。
- 第三步:當讀至輸入流末尾時,執行END{action;…}語句塊
print格式:
print item1, item2, ...
要點
1.逗號分隔符- 輸出的各item可以字符串,也可以是數值;當前記錄的字段、 變量或awk的表達式
- 如省略item,相當於print $0
printf
格式化輸出: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
+:顯示數值的正負符號 %+d二.awk中的變量
- 1.內置變量
- FS:輸入字段分隔符,默認為空白字符
- OFS:輸出字段分隔符,默認為空白字符
- RS:輸入記錄分隔符,指定輸入時的換行符,原換行符仍有效
- ORS:輸出記錄分隔符,輸出時用指定符號代替換行符
- NF:字段數量
- NR:行號
- FNR:各文件分別計數,行號
- FILENAME:當前文件名
- ARGC:命令行參數的個數
2.自定義變量
-v var=value
在program中直接定義三.操作符
- 算術操作符:
x+y, x-y, xy, x/y, x^y, x%y
-x: 轉換為負數
+x: 轉換為數值
字符串操作符:沒有符號的操作符,字符串連接
賦值操作符
++ 變量加1
-- 變量減1
+=將加的結果賦給變量
-= 將減的結果賦給變量
*= 將乘的結果賦給變量
/+ 將除的結果賦給變量
%= 將取模的結果賦給量
^= 將取冪的結果賦給變量
- 算術操作符:
比較操作符:
== 等於
!= 不等於
大於
= 大於等於
< 小於
<= 小於等於
模式匹配符:
~:左邊是否和右邊匹配包含
!~:是否不匹配
例子
[root@centos6 ~]# cat /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
只取前三行
[root@centos6 ~]# cat /etc/passwd | awk ‘NR<=3{print}‘
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologi
只取出用戶名 格式為 name 用戶名
[root@centos6 ~]# cat /etc/passwd | awk -F: ‘ NR<=3{ print "name", $1 }‘
name root
name bin
name daemon
取出用戶名及其uid 格式為 name:用戶名 uid:XXX
[root@centos6 ~]# cat /etc/passwd | awk -F: ‘ NR<=3{ printf "name: %-10s uid: %s\n", $1,$3}‘
name: root uid: 0
name: bin uid: 1
name: daemon uid: 2
取出用戶root的信息
[root@centos6 ~]# cat /etc/passwd | awk -F: ‘ $1~"root"{ print $0}‘
root:x:0:0:root:/root:/bin/bash
awk的簡單用法