gawk的使用札记
一、基础
1.程序格式
gawk options program file
-F:分隔符
-f: 文件
-v:变量
-mf: 最大字段数
-mr:最大行数
2.将命令放于花括号中
gawk '{...}'
3.字段变量
$0: 整行文本
$1...$n: 第n个字段
gawk -F: '{print $1}' /etc/passwd
echo "my name is sosop" | gawk '{$4="hsosop"; print $0}'
4.script
gawk -F: -f script1 /etc/passwd
script1:
{txt="the name of user is "; print txt $1}
5.处理数据前后运行脚本
gawk -F: 'BEGIN {print "before deal"} {print $1}' /etc/passwd
gawk 'BEGIN {print "BEGIN";a=10}{print a=a+1} END {print "END"}' /etc/passwd
二、进阶
1.变量
1.1、内建变量
FS: 输入字段分隔符
RS: 输入数据行分隔符
OFS: 输出字段分隔符
ORS: 输出数据行分隔符
FIELDWIDTHS: 分隔符空格 每个field的宽度
1.2、数据变量
FILENAME: 文件名
FNR: 当前文件行数
NF: 总字段数
NR: 已处理的行数
ARGC: 参数个数
ARGV[0]: 参数数组
ENVIRON["HOME"]
1.3、自定义变量
gawk -F: '{print $n}' n=1 /etc/passwd
2.数组处理
for(var in array) {
do something ...
}
delete var["index"]
3.模式匹配
gawk '/root/ {print $0}' /etc/passwd
gawk '$1 ~ /^d/ {print $0}' /etc/passwd
gawk '$1 !~ /^d/ {print $0}' /etc/passwd
4.数学表达式
gawk -F: '$3 == 1000 {print $0}' /etc/passwd
==、>、<、>=、<=
5.结构化
gawk -F: '{
if ($3 > 100) {
print $3
}
else
{
}
}' /etc/passwd
while(condition) {
statements;
}
do {
statements;
} while(condition)
for(i = 1; i < 10; i++) {
statements;
}
printf: 跟C语言一样
6.内建函数
6.1、数学函数
atan2(x,y) cos(x) sin(x) exp(x) int(x) log(x) rand() sqrt(x) srand(x)
6.2、字符串
asort(arr1[, arr2]) asorti(arr1[, arr2])
gensub(reg, s, h [,target]) gsub(reg, s [, target]) sub(reg, s [, target])
index(s, t) length([s])
match(reg, s [, arr])
split(s, a [, reg])
substr(s, i [,n]) tolower(s) toupper(s)
6.3、时间函数
mktime(datespec) strftime(format [,timestamp]) systime()
6.4、自定义函数
function name([var])
{
statements
}