概述
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