📅  最后修改于: 2023-12-03 14:43:56.593000             🧑  作者: Mango
gawk 是在 Unix 和 Linux 系统上一个非常常见的文本处理工具,它的全称是 GNU awk,是 GNU 项目的一部分,是 awk 的一个版本,awk 是处理文本的一种编程语言。gawk 命令行工具可以用于编写简单脚本或者命令行中直接使用,可用于快速处理和转化文本数据。本文将介绍 gawk 工具的常用方式和示例。
gawk 命令的基础格式如下:
gawk [选项] [脚本] [文件...]
其中,[选项]
是可选的,[脚本]
是包含 awk 命令的程序,[文件]
是将要处理的文本文件的列表。
gawk 命令可以根据指定的程序来处理输入,也可以在命令行上直接使用 awk 语句来处理文本。下面的示例展示了通过 gawk 命令直接处理文本的方式。
假设我们有一个文本文件 file.txt
,内容如下:
apple 100
orange 200
banana 150
我们想要把其中每行第二个单词的值加上 10,可以使用以下命令:
gawk '{ $2 += 10; print }' file.txt
输出结果为:
apple 110
orange 210
banana 160
在上面的命令中,{ $2 += 10; print }
是 awk 语句,$2
表示第二个单词,+=
表示加上一个数,print
表示输出行。
gawk 命令提供多个选项来控制输入、输出以及处理方式,下面是常用的一些选项:
-F
或 --field-separator
:指定字段分隔符,默认是空格或制表符。-f
或 --file
:指定存放 awk 程序的文件。-v
或 --assign
:指定一个变量并赋值。-o
或 --pretty-print
:输出整齐格式化的调试信息。下面是一些常见的选项使用示例。
假设我们有一个 CSV 文件 data.csv
,内容如下:
name,age,gender
Tom,20,Male
Lucy,18,Female
Jerry,22,Male
我们想要输出每行的第二个单词,可以使用 -F
选项来指定逗号为字段分隔符:
gawk -F, '{ print $2 }' data.csv
输出结果为:
age
20
18
22
我们也可以把 awk 程序存放到文件中,然后通过 -f
选项来指定文件名。假设我们有一个存放 awk 程序的文件 test.awk
,内容如下:
{
if ($2 > 100) {
print $1 " passed the test."
} else {
print $1 " failed the test."
}
}
我们可以使用以下命令来执行:
gawk -f test.awk file.txt
假设 file.txt
内容如下:
apple 100
orange 200
banana 150
则输出结果为:
apple failed the test.
orange passed the test.
banana passed the test.
我们可以使用 -v
选项来指定 awk 中变量赋值。下面的例子中,我们定义了变量 threshold
并赋值为 100,然后在 awk 程序中使用这个变量。
假设我们有一个文本文件 file.txt
,内容如下:
apple 100
orange 200
banana 150
我们想要输出其中值大于 threshold
的行的第一个单词,可以使用以下命令:
gawk -v threshold=100 '$2 > threshold { print $1 }' file.txt
输出结果为:
orange
banana
统计文件行数是 awk 常见的用途之一。假设我们有一个文件 file.txt
,我们可以使用以下命令来统计行数:
gawk 'END { print NR }' file.txt
其中,NR
是内置变量,表示处理的行数。上面的命令会输出 file.txt
中的行数。
下面是一个计算文件总和的 awk 程序:
{
sum += $1
}
END {
print sum
}
在这个程序中,我们定义了变量 sum
,然后逐行读取文件,把第一个单词的值加到 sum
中。在处理完所有行之后,awk 会输出 sum
的值。
如果我们有一个文件 data.txt
,内容如下:
1
2
3
我们可以使用以下命令来计算这个文件中所有数字的和:
gawk -f sum.awk data.txt
其中,sum.awk
是存放上面 awk 程序的文件。
假设我们有一个重定向到文件的 printf 命令的输出:
printf 'aaa bbb\nccc ddd\n'
输出结果为:
aaa bbb
ccc ddd
我们可以使用以下命令来把这个输出转换为 CSV 格式:
printf 'aaa bbb\nccc ddd\n' | gawk '{ print "\"" $1 "\",\"" $2 "\"" }'
输出结果为:
"aaa","bbb"
"ccc","ddd"
在上面的 awk 程序中,"
表示双引号,\
表示转义符,$1
和 $2
分别表示行中的第一个单词和第二个单词。
本文介绍了 gawk 命令的基础使用和常用选项,并提供了实用示例。gawk 是一个强大的文本处理工具,能够处理各种类型的文本数据,对于程序员而言非常有用。