目录
基本用法:
条件语句:
内置变量:
自定义分隔符:
数学运算:
使用多个文件:
生成“完整使用报告”的示例:
8. 模式匹配
9. BEGIN和END模式
10. 数组和关联数组
11. 脚本方式使用
12. 逐行处理
13. 控制语句
awk
是一个强大的文本处理工具,用于在文本文件中执行模式扫描和文本/数据提取。下面我将为您展示一些 awk
的基本用法和示例,以及如何使用它来生成一个“完整使用报告”。但请注意,由于“完整使用报告”是一个相对模糊的概念,我将为您提供一系列常见的 awk
用法示例。
-
基本用法:
- 打印文件中的所有内容:
awk '{print}' filename
- 打印文件的第一列:
awk '{print $1}' filename
- 打印文件的第一行:
awk 'NR==1 {print}' filename
- 打印文件的最后一行:
awk 'END {print}' filename
-
条件语句:
- 打印文件中大于10的数字所在的行:
awk '$1>10' filename
- 如果第一列大于10,则打印第一列和第二列:
awk '$1>10 {print $1, $2}' filename
-
内置变量:
- 打印文件的行数:
awk 'END {print NR}' filename
- 打印每行的字段数量:
awk '{print NF}' filename
-
自定义分隔符:
- 使用冒号
:
作为字段分隔符,并打印第一列:
awk -F: '{print $1}' filename
- 使用冒号
-
数学运算:
- 计算第一列和第二列的和,并打印结果:
awk '{sum=$1+$2; print sum}' filename
-
使用多个文件:
- 假设我们有两个文件
file1.txt
和file2.txt
,我们想要打印两个文件中都有的行(基于整行内容):
awk 'FNR==NR{a[$0];next} $0 in a' file1.txt file2.txt
7 生成“完整使用报告”的示例:
- 假设我们有两个文件
假设我们有一个名为 sales.txt
的文件,内容如下:
ProductID,ProductName,QuantitySold,Price | |
1,Apple,10,2.5 | |
2,Banana,20,1.2 | |
3,Cherry,5,3.8 |
我们可以使用 awk
来生成一个“销售报告”,例如:
awk -F, 'NR>1 {print "Product:", $2, "sold", $3, "units at", $4, "per unit, total:", $3*$4}' sales.txt |
输出:
Product: Apple sold 10 units at 2.5 per unit, total: 25 | |
Product: Banana sold 20 units at 1.2 per unit, total: 24 | |
Product: Cherry sold 5 units at 3.8 per unit, total: 19 |
8. 模式匹配
-
正则表达式:
awk
支持强大的正则表达式和模式匹配功能。
awk '/pattern/{print}' data.txt # 打印匹配pattern的行 |
9. BEGIN和END模式
-
BEGIN:在处理任何输入文件之前执行。
-
END:在所有输入文件都被处理完后执行。
awk -F: 'BEGIN {print "Username\tShell"} {print $1"\t"$7} END {print "blue\t/bin/nosh"}' /etc/passwd |
10. 数组和关联数组
- 定义数组:使用
数组名[下标] = 元素值
的格式定义数组。 - 遍历数组:使用
for(变量 in 数组名)
遍历数组。
11. 脚本方式使用
-
将所有的
awk
命令插入一个文件,并使awk
程序可执行,然后通过键入脚本名称来调用。 -
使用
-f
选项加载awk
脚本文件。
awk -f awk-script-file input-file(s) |
12. 逐行处理
awk
最适合逐行处理文本文件,按行分割的文本数据是awk
的主要应用场景。
13. 控制语句
awk
支持分支结构(单分支、双分支、多分支)、循环结构(while、do-while、for)以及其他控制语句(如中断、退出等)。
这只是一个简单的示例来展示如何使用 awk
来处理文本文件和生成报告。您可以根据自己的需求进一步定制 awk
脚本。