当前位置: 首页 > 科技观察

awk系列:如何使用awk内建变量

时间:2023-03-14 10:17:49 科技观察

我们将逐步揭开awk函数的神秘面纱。在本节中,我们将介绍awk内置变量的概念。在awk中可以使用两种类型的变量,它们是:user-defined用户定义变量和内置变量。awk内置变量已经有了预定义的值,但我们也可以仔细修改这些值。awk内置变量包括:FILENAME:当前输入文件名NR:当前输入行号(指输入第1、2、3...等行)NF:当前输入行的字段号OFS:输出字段分隔符FS:输入字段分隔符ORS:输出记录分隔符RS:输入记录分隔符要获取当前输入文件的名称,可以使用FILENAME内置变量,如下所示:$awk'{printFILENAME}'~/domains.txtawkFILENAME变量,你会看到每一行都会输出一次文件名,那是你使用内置的FILENAME指定变量时awk的默认行为。我们可以使用NR来计算输入文件中的行数(记录),请记住它也会计算空行,正如我们将在以下示例中看到的那样。当我们使用cat命令查看文件domains.txt时,会发现它有14行文本和2个空行:$cat~/domains.txt输出文件内容$awk'END{print"Numberofrecordsinfileis:",NR}'~/domains.txtawk统计行数要统计一条记录或一行的字段数,我们可以使用NR内置变量,如下:$cat~/names.txt列出了file$awk'{"Record:",NR,"has",NF,"fields";}'~/names.txtawk统计文件中的字段数接下来,也可以使用FS内置变量来指定输入文件分隔符,它将定义awk如何将输入行划分为字段。FS的默认值是“空格”和“制表符”,但我们也可以将FS值修改为任意字符,让awk根据情况分割输入行。有两种方法可以达到目的:第一种方法是使用FS内置变量第二种方法是使用awk的-F选项查看Linux系统上的/etc/passwd文件。文件中的每个字段都使用:分隔符,所以当我们要过滤掉一些字段时,我们可以指定:作为新的输入字段分隔符,示例如下:我们可以使用-F选项,如下:$awk-F':''{print$1,$4;}'/etc/passwdawk过滤密码文件中的字段另外,我们还可以使用FS的内置变量,如下:$awk'BEGIN{FS=":";}{print$1,$4;}'/etc/passwd使用awk过滤文件中的字段使用OFS内置变量指定输出的字段分隔符,它将定义如何使用指定的字符来分隔输出字段,示例如下:$awk-F':''BEGIN{OFS="==>";}{print$1,$4;}'/etc/passwd在文件中的字段中添加分隔符本节我们学习了使用具有预定义值的awk内置变量的概念。但是我们也可以修改这些值,尽管不建议这样做,除非你知道自己在做什么并且完全理解(这些变量值)。之后,我们将继续学习如何在awk命令操作中使用shell变量,敬请期待。