概述
awk '{pttern + action}' {filename}
parttern表示在AWK總查找的內容,action表示找到內容執時所執行的動作。AWK以文件的一行作爲處理單位。
BEGIN/END
BEGIN/END
BEGIN塊 在處理輸入前會執行一次
END塊在處理完文件之後再執行一次
運算符
賦值運算符 = += -= *= /= %= ^= **=
邏輯與 &&
邏輯或 ||
匹配正則 ~
不匹配正則 |~
加減乘除取餘 +-*/%
一元加減 -+
邏輯非 !
求冪 ^
自增自減 --++
字段引用 $
字符串鏈接符 空格
三目運算 ?:
是否在數組中 in
內置變量
$0 當前記錄
$1-$n 當前記錄的第n個字段
FS 輸入字段分隔符,默認是空格 field split
RS 輸入記錄分隔符,默認是換行符 record split
NF 當前記錄的字段數 number of field
NR 已經讀出的字段數,從1開始 number of record
OFS 輸出字段分隔符,默認是空格
ORS 輸出記錄分隔符,默認是換行
awk正則
實例
- 指定多個分隔符
vim test.tst
I am Petter,my numver is 20109
找出Petter 20109
awk -F '[ ,]+' '{print $3 " " $7}' test.txt
Petter 20109
2/統計某個文件夾下文件佔用的字節數
ll | awk 'BEGIN{size=0;} {size=size+$5} END{print "[end]size is",size}'
2.字段分隔符使用
1.FS="\t" 一個或多個Tab分隔
vim tab.txt
ww CC TDD
awk 'BEGIN{FS="\t+"}{print $1,$2,$3}' tab.txt
2.FS="[" ":]+" 一個或者多個空格或者:
[root@Gin scripts]# cat recode.txt
Jimmy the Weasel
100 Pleasant Drive
San Francisco,CA 123456
Big Tony
200 Incognito Ave.
Suburbia,WA 64890
[root@Gin scripts]# cat awk.txt
#!/bin/awk
BEGIN {
FS="\n"
RS=""
}
{
print $1","$2","$3
}
[root@Gin scripts]# awk -f awk.txt recode.txt
Jimmy the Weasel,100 Pleasant Drive,San Francisco,CA 123456
Big Tony,200 Incognito Ave.,Suburbia,WA 64890