awk
是一种强大的文本处理工具,在 Linux 系统中广泛应用。它内部有一系列预定义的变量,这些变量在处理文本时非常有用。以下是一些常见的 awk
内部变量及其解释:
NF
:表示当前行的字段数(默认以空格或制表符分隔)。NR
:表示当前处理的记录(行)数。FS
:字段分隔符,默认为空格或制表符。可以通过 -F
选项或在脚本中设置来改变。RS
:记录分隔符,默认为换行符。可以用来指定输入记录的分隔符。OFS
:输出字段分隔符,默认为空格。可以设置输出的字段之间的分隔符。ORS
:输出记录分隔符,默认为换行符。可以设置输出的记录之间的分隔符。FILENAME
:当前正在处理的文件名。FNR
:与 NR
类似,但当处理多个文件时,它会在每个文件开始时重置。假设我们有一个名为 data.txt
的文件,内容如下:
John Doe 25 Engineer
Jane Smith 30 Manager
Bob Johnson 28 Sales
我们可以使用 awk
和其内部变量来处理这个文件。例如,要打印每行的字段数、行号和文件名,可以使用以下命令:
awk '{print "Fields:", NF, "Line:", NR, "File:", FILENAME}' data.txt
输出将是:
Fields: 4 Line: 1 File: data.txt
Fields: 4 Line: 2 File: data.txt
Fields: 4 Line: 3 File: data.txt
假设我们遇到一个问题,需要找出 data.txt
文件中年龄大于 25 岁的人的名字。我们可以使用 awk
和条件语句来解决这个问题:
awk '$3 > 25 {print $1}' data.txt
这里,$3
表示每行的第三个字段(年龄),$1
表示每行的第一个字段(名字)。这个命令会输出:
Jane Smith
Bob Johnson
awk
时,建议始终在命令行中使用 -F
选项明确指定字段分隔符,以避免由于默认分隔符导致的意外结果。NR
和 FNR
的区别。NR
是全局行号,而 FNR
是每个文件的行号。总之,awk
的内部变量为我们提供了强大的文本处理能力,通过熟练掌握这些变量,我们可以高效地完成各种文本处理任务。
领取专属 10元无门槛券
手把手带您无忧上云