首页 > linux > gawk编辑器

gawk编辑器

作者:bin
目录
[隐藏]

一、什么是gawk

gawk和sed一样是一种流编辑器,他提供的不仅是命令,更是一种编程语言,

二、简单的基础

命令行 : gawk option program file

echo "hello" | gawk '{print "你好"}'

print命令会将结果打印至STDOUT

echo "hello world,ben" | gawk '{print $1}'

使用$符号打印内容,默认分隔符为空格,你也可以使用-F指定分隔符,这里使用逗号(,)做分隔符

echo "hello world,ben" | gawk -F, '{print $1,$2}'

还可以更改变量的值

echo "hello world,ben" | gawk -F, '{$2="tom";print $1,$2}'

使用BEGIN\END等命令,在脚本开始执行时运行

echo "hello world,ben" | gawk -F, 'BEGIN{print "start"}{$2="tom";print $1,$2}'

在BEGIN\END命令中更改输入、输出分隔符

echo "hello world,ben" | gawk 'BEGIN{FS=","; OFS="-"}{$2="tom";print $1,$2}'

三、进阶学习

1.使用环境变量

使用EVNIRON命令查询shell中的环境变脸

echo "hello world,ben" |gawk '{print ENVIRON["HOME"]}'

2.使用自己的变量

echo "hello world,ben" |gawk 'BEGIN{name="ben"}{print name}'

在命令行上进行赋值

echo "hello world,ben" |gawk 'BEGIN{name="ben"}{print name}' name="tom"

定义数组(也可以使用for id in var进行遍历)

echo "hello world,ben" |gawk 'BEGIN{var[1]=20;var[2]=10}{print var[1]+var[2]}'

3.使用匹配模式

匹配模式中使用正则表达式必须在它要控制的程序脚本之前

echo "hello world,ben" |gawk 'BEGIN{var[1]=20;var[2]=10} /hello/{print var[1]+var[2]}'

同时你可以指定仅限于某个变量执行正则匹配,下面的$1换成$2就不会有结果了

也可以用var[1]作为变量,还可以$1  !~排除变量

echo "hello world,ben" |gawk 'BEGIN{var[1]=20;var[2]=10} $1 ~ /hello/{print var[1]+var[2]}'

还可以在匹配模式中使用数学表达式

echo "hello world,ben" |gawk 'BEGIN{var[1]=20;var[2]=10} var[1] == 20 {print var[1]+var[2]}'

4.结构化命令

可以使用标准的if-then-else语句

echo "hello world,ben" | gawk '{if (money > 100) { print "iam rich"} else { print "iam poor"}}' money=120

使用while进行循环操作(也可以在其中加入break进行流程控制)

同理也可以使用do {}while(condition)  这里就不再演示

echo "hello world,ben" | gawk '{while(i < 4) { i++; print i;}}' i=0

使用for循环

echo "hello world,ben" | gawk '{for (i=1; i<=4; i++) {print i;}}'

5.格式化打印(printf)

gawk的printf和c语言中很相似

显示一个整数

echo "hello world,ben" | gawk '{printf "%d\n",10.1}'

使用修饰符控制输出,强制输出第一、第二个变量的宽度为16字符,并且使用-左对齐

echo "hello world,ben" | gawk '{printf "%-16s %-16s %s\n",10.1,"zengbin","shenzhen"}'

通过.1 .2 .3 取小数点后1位,2位,3位小数

echo “hello world,ben” | gawk ‘{printf “%.2f\n”,10.1}’

综合示例:左对齐,输出宽度为16位,左对齐,去小数点后3位

echo "hello world,ben" | gawk '{printf "%-16.3f\n",10.1}'

6.使用函数

内建函数网上一大把不介绍了

使用自定义函数,定义自定义函数必须在所有代码块前,包括BEGIN

echo "hello world" | gawk 'function myrand(limit) {return int(limit * rand())} {print myrand(10)}'

同时你可以使用 -f 引入自己函数库

echo "hello world" | gawk  -f funclib -f script

 

您必须 [ 登录 ] 才能发表留言!