gawk
是 awk
程序的GNU
版本,能够提供一个类编程环境来修改和重新组织文件中的数据
*
定义变量保存数据
*
使用算术和字符串操作符来处理数据
*
使用结构化编程(if-then等)来为数据处理增加处理逻辑、
*
通过提取数据文件中的数据元素,将其重新排列或格式化,生成格式化报告
gawk选项
选项 | 描述 |
---|---|
-F fs | 指定行中划分数据字段的字段分隔符 |
-f file | 从指定的文件中读取文件 |
-v var=value | 定义gawk程序中的一个变量及其默认值 |
-mf N | 指定要处理的数据文件中的最大字段数 |
-mr N | 指定数据文件中最大数据行数 |
-W keyword | 指定gawk的兼容模式或警告等级 |
*gawk
程序脚本用一对花括号({})
来定义
*
由于gawk
命令行假设脚本是单个文本字符串,还必须将脚本放入单引号
中
gawk '{print "hello world"}'
命令行上该命令没有指定文件,所以会从STDIN接受数据
gawk数据字段
$0
代表整个文本行
$1
代表文本行中第一个数据字段
$2
代表文本行中第二个数据字段
$n
代表文本行中第n个数据字段
gawk
默认的字段分割符是空白字符(空格或者制表符)
gawk -F : '{print $1}' /etc/passwd
显示系统密码文件中的第一个字段
*gawk允许多条命令组合使用,但需要在命令之间加上分号(sed 需要加上 -e 选项)
echo "My name is haha" | gawk '{$4="hhhh"; print $0}'
给第四个变量命名后,打印整条语句
gawk将程序存储到文件中
cat script3.gawk # 程序名后缀一般标识为 .gawk
{
text="'s homne directory is "
print $1 text $2 #gawk在引用变量时不用美元$符号
}
# 调用
gawk -F : -f script3.gawk /etc/passwd
在处理数据前后运行脚本
echo "my name is ym" | gawk 'BEGIN {print "start"} {print $0} END {print "end"}'
BEGIN
在处理数据前运行脚本
END
在处理数据后运行脚本
echo "my name is ym" | gawk 'BEGIN {print "start"; FS=":"} {print $0} END {print "end"}'
FS
特殊变量,定义字段分割符的另一个办法