Linux 命令之 - awk
命令简介
AWK 是一种强大的文本处理工具,主要用于对文本文件进行模式匹配和数据处理。它是一种解释型的编程语言,具有高度的可移植性和易学性。AWK 由三个人的名字首字母组成,分别是 Alfred Aho、Peter Weinberger 和 Brian Kernighan。
命令语法
AWK 命令的基本语法格式为: awk [options] ‘script’ file(s)
- options: 用于指定 AWK 命令的选项,例如 -F 指定字段分隔符。
- script: 用于指定 AWK 命令的程序代码。
- file(s): 需要处理的一个或多个文件。
参数说明
AWK 命令提供了多个可选参数,下表列出了常用的参数及其说明:
命令实例
下面给出一些 AWK 命令的实例,以帮助更好地理解其用法:
1.从文件中读取 AWK 脚本
1 | awk -f script.awk input_file |
3.设置变量的值
1 | awk -v var=value '{print var}' input_file |
基本打印输出
1.打印文件的每一行
1 | awk '{print}' file.txt |
2.打印文件的第二列
1 | awk '{print $2}' file.txt |
3.打印指定字段
1 | awk '{print $2, $1}' input_file |
4.使用自定义分隔符
1 | awk -F':' '{print $1}' input_file |
模式匹配
1.打印包含特定模式的行
1 | awk '/pattern/' file.txt |
统计和计算
1.统计文件的行数
1 | awk 'END {print NR}' file.txt |
2.计算文件每行字符数的总和
1 | awk '{sum += length($0)} END {print sum}' input_file |
3.计算文件中数值字段的平均值
1 | awk '{sum += $1} END {print "Average: ", sum/NR}' input_file |
4.计算整个文件的字段总和
1 | awk '{sum+=$2} END {print sum}' file.txt |
5.输出指定字段的最大值和最小值
1 | awk 'BEGIN {max = 0; min = 999999} {if ($1 > max) max = $1; if ($1 < min) min = $1} END {print "Max: ", max, "Min: ", min}' input_file |
文本替换
1.用特定字符替换字段
1 | awk '{sub(/foo/,"bar",$1); print}' file.txt |
格式化输出
1.格式化打印输出
1 | awk 'BEGIN {printf "%-10s %-10s\n","Name","Age"} {printf "%-10s %-10d\n",$1,$2}' file.txt |
内置变量
假设有一个名为 data.txt 的文件内容如下:
1 | Alice 25 |
1.使用 NF 打印没一行中字段的数量
1 | awk '{print NF}' data.txt |
输出结果:
1 | 2 |
2.使用 NR 获取行号
1 | awk '{print NR, $0}' data.txt |
输出结果:
1 | 1 Alice 25 |
3.使用 FS 指定分割符号,默认为任意空白字符(空格或制表符)。如果数据文件中的字段使用逗号作为分隔符,我们可以使用 -F 参数来指定分隔符:
1 | awk 'BEGIN {FS=" "} {print $2}' test_data.txt |
或者:
1 | awk -F ' ' '{print $2}' test_data.txt |
又或者简写成:
1 | awk '{print $2}' test_data.txt |
输出结果:
1 | 25 |
4.使用 OFS 设置分割符:
1 | awk 'BEGIN {OFS=","} {print $1, $2}' data.txt |
输出结果:
1 | Alice,25 |
控制语句
1.使用 if-else 语句
1 | awk '{if ($2 > 50) {print $1, "老年人"} else {print $1, "年轻人"}}' file.txt |
或者:
1 | awk '$3 > 50 {print $1, $2}' input_file |
2.使用 for 循环遍历每个字段
1 | awk '{for (i=1; i<=NF; i++) {print $i}}' file.txt |
这些只是 AWK 命令的基本用法,它还有许多高级功能,如数组、函数、控制语句等,可以完成更加复杂的文本处理任务。通过实践和学习,你可以逐步掌握 AWK 的强大功能。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 生活日志!
评论