AWK 是 Linux 中强大的文本处理工具,尤其适合结构化数据的处理。以下是 AWK 的常见用法及示例:
awk 'pattern {action}' file.txt
# 打印第1列和第3列
awk '{print $1, $3}' file.txt
# 打印最后一列
awk '{print $NF}' file.txt
# 使用冒号作为分隔符(默认是空格/制表符)
awk -F':' '{print $1}' /etc/passwd
# 输出时用指定符号连接列
awk '{print $1 " -> " $3}' file.txt
# 打印第2列大于10的行
awk '$2 > 10 {print $0}' file.txt
# 匹配包含"error"的行(正则表达式)
awk '/error/ {print}' log.txt
# 多条件组合(&& 或 ||)
awk '$1 == "root" && $3 > 1000 {print}' file.txt
# NR:当前行号;NF:当前行的列数
awk '{print NR, NF, $0}' file.txt
# 打印总行数
awk 'END {print NR}' file.txt
# 求和第3列
awk '{sum += $3} END {print sum}' file.txt
# 计算平均值
awk '{sum += $1; count++} END {print sum/count}' data.txt
# 分组统计(按第1列分组求和)
awk '{arr[$1] += $2} END {for (i in arr) print i, arr[i]}' data.txt
# 在开头和结尾执行操作
awk 'BEGIN {print "Start"} {print $0} END {print "End"}' file.txt
# 获取字符串长度
awk '{print length($1)}' file.txt
# 字符串拼接
awk '{print $1 "-" $2}' file.txt
# 格式化输出(类似C语言的printf)
awk '{printf "%-10s %5d\n", $1, $2}' file.txt
var="value"
awk -v awk_var="$var" '{print awk_var, $1}' file.txt
# 通过system()调用(慎用)
awk '{if ($1 ~ /error/) system("grep " $1 " /var/log/syslog")}' log.txt
# 处理多个文件,FILENAME变量表示当前文件名
awk '{print FILENAME, $0}' file1.txt file2.txt
awk -f script.awk
)。掌握这些用法后,可以高效处理大多数文本任务。如需更复杂的功能,可深入学习 AWK 的数组、函数等特性。