gawk 指令
1、基本语法
gawk
是 GNU 版本的 AWK,一个强大的文本处理工具,主要用于从文件或输入流中提取数据并进行格式化处理。它适用于处理结构化文本,例如日志文件、CSV 数据等。
语法:
gawk '条件 {动作}' 文件名
$1
表示第一字段,$2
表示第二字段,依此类推;$0
表示整行。
内置变量
NR
:当前记录号(行号)。NF
:当前记录中的字段个数。FS
:字段分隔符(默认是空白)。OFS
:输出字段分隔符(默认是空白)。RS
:记录分隔符(默认是换行符)。ORS
:输出记录分隔符(默认是换行符)。
操作符
- 算术运算:
+
,-
,*
,/
,%
- 比较运算:
==
,!=
,<
,>
,<=
,>=
- 逻辑运算:
&&
,||
,!
2、打印字段
文件内容:
打印所有行
gawk '{print $0}' a1.txt
结果:
打印第1个字段和第3个字段
gawk '{print $1,$3}' a1.txt
结果:
打印行号
gawk '{print NR, $0}' a1.txt
结果:
gawk '{print NR, $3}' a1.txt
打印字段个数
gawk '{print NF,$0}' a1.txt
3、设置分隔符
源文件内容:
将分隔符设置为逗号
gawk -F ',' '{print $1}' a2.txt
gawk -F ',' '{print $2}' a2.txt
gawk -F ',' '{print $3}' a2.txt
结果:
将分隔符设置为|
再例如,源文件:
gawk -F '|' '{print $1,$3}' a3.txt
结果:
4、BEGIN 和 END 块
BEGIN
块:在处理任何记录之前执行。END
块:在处理完所有记录之后执行。
例如:统计行号
源文件
gawk 'BEGIN {print "start calculate:" } {line++}{print "line now:"line } END {print "finish: total lines:"line }' a1.txt
结果:
5、累加字段值(求和)
源文件
计算第二个字段的和
gawk 'BEGIN {print "start calculate:"} {sum +=$2} {print"sum now:",sum} END {print"sum:",sum} ' a1.txt
运行结果:
假设第二个字段是个十六进制数,需要转换一下:
gawk 'BEGIN {print "start calculate:"} {sum +=strtonum("0x"$2)} {print"sum now:",sum} END {print"sum:",sum} ' a1.txt
6、打印包含某个字段的行
源文件
gawk '/Teacher/ {print $0}' a1.txt
7、处理多文件
假设有两个文件
gawk '{print NR,FILENAME, $0}' a5.txt a6.txt
结果:
8、内置函数
gawk
提供了许多内置函数,例如:
length($0)
:计算字符串长度。substr($0, start, length)
:截取子字符串。tolower($0)
:将字符串转换为小写。toupper($0)
:将字符串转换为大写。
例如:打印每行的长度
源文件
gawk '{print $0,length($0)}' a1.txt
结果: