awk 是 Linux 中非常强大的文本处理工具,特别适合处理结构化文本(如 CSV、日志文件等)。以下是一些常用的 awk 示例。
1.打印文件的每一行
awk '{print $0}' file.txt
- $0 表示整行内容。
2.打印文件的每一行的第一个字段
awk '{print $1}' file.txt
- 默认以空格或制表符为分隔符,$1 表示第一个字段。
3.指定分隔符
awk -F',' '{print $2}' file.csv
- -F',' 指定逗号为字段分隔符,打印每行的第二个字段。
4.打印特定行
awk 'NR == 3' file.txt
- NR 表示当前行号,打印第 3 行。
5.打印行号
awk '{print NR, $0}' file.txt
- NR 是当前行号,$0 是整行内容。
6.打印文件的总行数
awk 'END {print NR}' file.txt
- END 表示处理完所有行后执行,NR 是总行数。
7.打印匹配特定模式的行
awk '/error/ {print $0}' logfile.txt
- 打印包含 "error" 的行。
8.打印匹配模式的行的特定字段
awk '/error/ {print $1, $3}' logfile.txt
- 打印包含 "error" 的行的第 1 和第 3 个字段。
9.条件判断
awk '$3 > 100 {print $0}' data.txt
- 如果第 3 个字段的值大于 100,则打印整行。
10.计算某一列的总和
awk '{sum += $1} END {print sum}' file.txt
- 计算第 1 列的总和并输出。
11.打印字段数
awk '{print NF}' file.txt
- NF 表示当前行的字段数。
12.打印最后一列
awk '{print $NF}' file.txt
- $NF 表示最后一个字段。
13.多条件匹配
awk '$1 == "foo" && $2 > 10 {print $0}' file.txt
- 如果第 1 个字段是 "foo" 且第 2 个字段大于 10,则打印整行。
14.替换字段内容
awk '{$3 = "new_value"; print $0}' file.txt
- 将第 3 个字段替换为 "new_value",然后打印整行。
15.格式化输出
awk '{printf "Name: %s, Age: %d\n", $1, $2}' file.txt
- 使用 printf 格式化输出,%s 表示字符串,%d 表示整数。
16.处理多个文件
awk '{print FILENAME, $0}' file1.txt file2.txt
- FILENAME 表示当前文件名,打印文件名和每行内容。
17.忽略大小写匹配
awk 'BEGIN {IGNORECASE=1} /error/ {print $0}' logfile.txt
- BEGIN 块设置 IGNORECASE=1,忽略大小写匹配 "error"。
18.统计某一列的最大值
awk 'max < $1 {max = $1} END {print max}' file.txt
- 找出第 1 列的最大值并输出。
19.按行处理并执行外部命令
awk '{system("echo " $1)}' file.txt
- 使用 system 函数调用外部命令(如 echo)。
20.处理 CSV 文件
awk -F',' '{print $1, $3}' data.csv
- 以逗号为分隔符,打印第 1 和第 3 列。
21.跳过文件头
awk 'NR > 1 {print $0}' file.txt
- 跳过第 1 行(通常是表头),打印剩余行。
22.按列求和并输出
awk '{sum += $1} END {print "Total:", sum}' file.txt
- 计算第 1 列的总和,并在最后输出。
23.根据条件过滤并保存到新文件
awk '$3 > 50 {print $0 > "output.txt"}' file.txt
- 如果第 3 列大于 50,则将整行保存到 output.txt。
24.统计某一列的唯一值
awk '{count[$1]++} END {for (item in count) print item, count[item]}' file.txt
- 统计第 1 列的唯一值及其出现次数。
25.处理多行记录
如果文件中的记录跨越多行(例如日志文件),可以使用 RS(记录分隔符):
awk 'BEGIN {RS="\n\n"} {print $0}' file.txt
- 将空行作为记录分隔符,处理多行记录