awk工作原理
- 逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。
- awk倾向于将一行分成多个"字段"然后再进行处理。
- awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。
- 使用awk命令的过程中,可以使用逻辑操作符"&&"表示"与"、"|"表示"或"、"!"表示"非",还可以进行简单的数学运算,如+、-、*、/、%、^分别表示加、减、乘、除、取余和乘方。
awk基本用法
awk是一种文本处理工具,常用于生成报告、格式化数据等。它的基本用法如下:
awk [options] 'pattern { action }' file
- options:可选参数,如 -F 指定分隔符。
- pattern:匹配模式,用于筛选符合条件的行。
- action:对匹配到的行执行的操作。
- file:要处理的文件。
下面是一些常见的awk用法示例:
- 打印文件的第一列:
awk '{ print $1 }' file.txt
- 打印文件中包含特定字符串的行:
awk '/pattern/ { print }' file.txt
- 使用逗号作为分隔符,打印第二列和第三列:
awk -F, '{ print $2, $3 }' file.txt
- 对第一列求和:
awk '{ sum += $1 } END { print sum }' file.txt
- 计算第一列大于10的行的总数:
awk '$1 > 10 { count++ } END { print count }' file.txt
awk常见的内建变量
$0
:表示当前处理的行的整行内容。通常在处理整行数据时使用,例如打印整行内容或进行字符串匹配。NR
:表示当前处理的行的行号或序数。它可以用来追踪数据的行数,通常在需要记录行数或行号的情况下使用。$n
:表示当前处理行的第n个字段(第n列)。这些字段是由字段分隔符(FS或-F指定)分割的数据的一部分。可以通过$n来访问特定字段的内容,例如$1表示第一个字段,$2表示第二个字段,以此类推。FS
:列分隔符。用于指定每行文本的字段分隔符,默认为空格或制表符。可以使用-F选项来设置。FS定义了字段之间的分隔符,帮助AWK将每行数据划分为字段。OFS
:输出内容的列分隔符。与FS类似,但用于控制AWK输出结果的字段之间的分隔符。可以通过修改OFS来自定义输出格式。NF
:表示当前处理的行的字段个数。NF的值等于当前行中的字段数。通常用于循环遍历所有字段,尤其是当字段数不固定时很有用。$NF代表最后一个字段。FILENAME
:被处理的文件名。在处理多个文件时,可以使用FILENAME来跟踪当前正在处理的文件的名称。RS
:行分隔符。AWK从文件上读取数据时,将根据RS的定义将数据切分为多个记录(行)。默认情况下,RS是换行符('\n'),但您可以根据需要自定义RS以适应不同的数据格式