GAWK 命令 - 1
GNU AWK#
gawk
是 GNU 版本的文本处理工具。
在大多数 GNU/Linux 发行版中,gawk
是默认的 awk
实现,因此在日常使用中通常没有区别。
gawk
命令默认使用 ERE 模式。
基本语法#
OPTIONS
:命令选项。program
:这尼玛命令里面还有个程序。file
:处理的文件,如果省略,读取 STDIN。
省略 file
为交互模式,输入一行执行一次。
运行过程#
基础用法#
创建 foo 文件。
对于每行数据,gawk
默认使用空格/制表符分隔字段。
BEGIN/END 结构#
- BEGIN:初始化,在解释前执行。
- BODY:对每个记录执行一次。
- END:结束处理。
注意使用引号 'EOF'
创建文件,这样不会处理特殊字符 $
。
常用选项#
指定分隔符#
-F
选项可以修改行的分隔符。
指定文件#
-f
选项可以指定文件。
变量参数赋值#
-v
选项可以在 BEGIN 之前给变量赋值。
如果不需要在 BEGIN 中使用,可以不用 -v
参数。
内置变量#
变量 $N#
$N
还可以赋值,字符串的双引号不能省略。
变量 FS#
Field Separator,字段分隔符。
变量 NF#
Number of Fields,表示记录中的字段的数量。
变量 NR#
Number of Records,表示当前处理的记录编号,默认值为 1,处理一行后会加 1。
可用于跳过文本的第一行,第一行的 NR
值为 1。
变量 RS#
Record Separator,输入记录分隔符,默认值为 \n
,表示以换行符分隔每条记录。
将 RS
设置为 ""
表示以空行作为记录分隔符,对于下面的文本,会分为上下 2 个记录。
设置 FS="\n"
,则可通过 $N
获取每行记录。RS
和 FS
通常结合使用。
变量 OFS#
Output Field Separator,输出字段分隔符。
变量 FIELDWIDTHS#
指定字符宽度进行分隔。
条件与结构#
条件表达式#
==
、<
,<=
,>
,>=
。
输出所有以 bash 启动的用户。
条件语句#
if
里面单条语句可不加 {}
。
if
里面多条语句要加 {}
。
单行的 else
语句,前面的语句要加 ;
号。
多行不需要加分号。
FOR 语句#
对每一行的字段求和,+=
和 ++
都支持。
WHILE 语句#
对每一行的字段求和。
DO-WHILE 语句#
对每一行的字段求和
函数相关#
内建函数#
int(x)
:取 x 的整数部分。exp(x)
:x 的指数。sqrt(x)
:x 的平方根。rand()
:比 0 大且小于 1 的随机数。length(x)
:x 的字符串长度。tolower(x)
:x 转小写。toupper(x)
:x 转大写。
还有很多,如 gensub
,gsub
。
自定义函数#
自定义函数必须出现在 BEGIN
块之前。
可以使用函数库文件,再引用。
gawk 程序文件如下。
使用 -f 选项引用两个文件。
引用函数库就不能使用内联程序模式,都需要引用。
其它例子#
自定义变量#
支持数学运算和浮点数,这不比 bash 强 🤪。
数组操作#
特点:关联数组,类似字典,无序。
可以使用数字下标,其实也是字典。
遍历数组,删除元素。
格式化打印#
处理浮点数。
指定宽度。
左对齐。