概念說明: 模式識別和腳本編寫
執行原理: 按行處理文件信息, 根據匹配條件信息, 完成相應操作動作
語法結構: awk [參數] ‘模式信息(條件) {動作}’ 文件信息
參數:
參數 | 用途 |
---|---|
-F | 指定列分隔符 |
-v | var=val 自定義變量賦值 |
-P(或–posix) | 支持{} |
-f | 指定awk腳本文件 |
字段(列)
變量名 | 含義 |
---|---|
$1 | 第一個字段 |
$2 | 第二個字段 |
$3 | 第三個字段 |
$NF | 最後一個字段 |
$0 | 整行 |
NF | 每行字段數 |
FS | 輸入字段分隔符 |
OFS | 輸出字段分隔符 |
記錄(行)
變量名 | 含義 |
---|---|
NR | 行號,記錄的數 awk當前處理着的,記錄的數 |
RS | 輸入記錄(行)分隔符 |
ORS | 輸出時候的分隔符 |
FNR | 當前文件的讀入記錄號 |
創建環境:
cat >> awk_test.txt << EOF
Zhang Dandan 41117397 :250:100:175
Zhang Xiaoyu 390320151 :155:90:201
Meng Feixue 80042789 :250:60:50
Wu Waiwai 70271111 :250:80:75
Liu Bingbing 41117483 :250:100:175
Wang Xiaoai 3515064655 :50:95:135
Zi Gege 1986787350 :250:168:200
Li Youjiu 918391635 :175:75:300
Lao Nanhai 918391635 :250:100:175
顯示xiaoyu的姓氏和ID號碼
[root@yu zy]# awk 'NR==2{print $1,$3}' awk_test.txt
Zhang 390320151
姓氏是zhang的人,顯示他的第二次捐款金額及他的名字
[root@yu zy]# awk '$1~/Zhang/' awk_test.txt
Zhang Dandan 41117397 :250:100:175
Zhang Xiaoyu 390320151 :155:90:201
顯示所有ID號碼最後一位數字是1或5的人的全名
[root@yu zy]# awk '$3~/1$|5$/' awk_test.txt
Zhang Xiaoyu 390320151 :155:90:201
Wu Waiwai 70271111 :250:80:75
Wang Xiaoai 3515064655 :50:95:135
Li Youjiu 918391635 :175:75:300
Lao Nanhai 918391635 :250:100:175
顯示所有ID號碼最後一位數字不是1或5的人的全名
[root@yu zy]# awk '$3!~/[15]$/{print $1,$2,$3}' awk_test.txt
Zhang Dandan 41117397
Meng Feixue 80042789
Liu Bingbing 41117483
Zi Gege 1986787350
顯示Xiaoyu的捐款,每個捐款數值都有以$開頭, 如$110$220$330
[root@yu zy]# awk '$2~/Xiaoyu/{gsub(/:/,"$",$NF);print $NF}' awk_test.txt
$155$90$201
可以實現數值運算 — 計算器
[root@yu zy]# awk 'BEGIN{print 2+3}'
5
[root@yu zy]# awk 'BEGIN{print 2-3}'
-1
[root@yu zy]# awk 'BEGIN{print 2*3}'
6
[root@yu zy]# awk 'BEGIN{print 2^3}'
8
[root@yu zy]# awk 'BEGIN{print 2/3}'
0.666667