Linux-awk
awk
是 Linux 和 Unix 系统中一个强大的文本处理工具,用于模式扫描和处理。它可以将文本按字段处理,支持复杂的逻辑和计算。
基本语法
awk '模式 {动作}' 文件名
- 模式:指定要匹配的条件(可选)。
- 动作:对匹配的行执行的操作。
- 文件名:要处理的文件。
常用变量
变量 | 描述 |
---|---|
$0 |
整行内容。 |
$1, $2, ... |
第 1、2 个字段。 |
NF |
当前行的字段数量。 |
NR |
当前行号。 |
FS |
字段分隔符(默认是空格)。 |
OFS |
输出字段分隔符(默认是空格)。 |
示例
打印文件内容
-
打印文件的每一行:
awk '{print}' file.txt
-
打印文件的第 1 列:
awk '{print $1}' file.txt
-
打印文件的第 1 列和第 3 列:
awk '{print $1, $3}' file.txt
条件匹配
-
打印包含
error
的行:awk '/error/ {print}' file.txt
-
打印第 2 列大于 100 的行:
awk '$2 > 100 {print}' file.txt
计算
-
计算文件中第 2 列的总和:
awk '{sum += $2} END {print sum}' file.txt
-
计算文件中第 2 列的平均值:
awk '{sum += $2; count++} END {print sum/count}' file.txt
字段分隔符
-
使用
:
作为字段分隔符,打印第 1 列:awk -F: '{print $1}' file.txt
-
使用
:
作为字段分隔符,;
作为输出字段分隔符:awk -F: -v OFS=";" '{print $1, $2}' file.txt
多条件处理
-
打印第 2 列大于 100 且第 3 列小于 50 的行:
awk '$2 > 100 && $3 < 50 {print}' file.txt
内置函数
-
计算每行的字段数量:
awk '{print NF}' file.txt
-
计算文件的行数:
awk 'END {print NR}' file.txt
高级用法
BEGIN和END
-
BEGIN
块在处理文件前执行,END
块在处理文件后执行。 -
示例:打印文件的行数和列数:
awk 'BEGIN {print "Start Processing"} {print $0} END {print "Total Lines:", NR}' file.txt
自定义变量
-
使用自定义变量进行计算:
awk '{total += $2} END {print "Total:", total}' file.txt
数组
-
使用数组统计第 1 列的出现次数:
awk '{count[$1]++} END {for (item in count) print item, count[item]}' file.txt