Awk 存储变量
Awk 是一种强大的文本处理工具,广泛应用于数据处理和分析,本文将详细介绍如何在 Awk 中定义和使用变量,包括数值表达式和赋值运算符的使用方法,通过这些知识,你将能够更高效地处理文本数据。
一、Awk 变量
在各种编程语言里,变量充当存储特定值的容器,一旦你在程序文件中声明了一个变量,程序执行时,就会在内存中分配一块空间来保存你为这个变量指定的值,定义 Awk 变量的方法与定义 shell 变量的方法相同,具体如下:
variable_name=value
在上述语法规则中:
variable_name
:指的是你为变量指定的名称。
value
:指的是变量存储的具体数值。
让我们看一些具体的例子:
computer_name="tecmint.com" port_no="22" email="admin@tecmint.com" server="computer_name"
观察上述的简单实例,在首次定义变量时,将值tecmint.com
分配给了变量computer_name
,同样,数字22
被赋予了变量port_no
,还可以把一个变量的值赋给另一个变量,就像最后一个例子中,将变量computer_name
的值赋给了变量server
。
如果你还记得,在本系列的第二部分,讨论了字段编辑,当时讨论了 Awk 如何将输入行分割成不同的字段,并使用标准的字段访问操作符 $ 来读取这些已解析的字段,也可以使用变量来保存字段的值,具体方法如下。
first_name=$2 second_name=$3
在上述例子中,变量first_name
被赋予了第二字段的值,而second_name
则被赋予了第三字段的值,假设有一个名为 names.txt 的文件,该文件列出了一个应用程序的用户的名单,包括他们的名、姓和性别,可以使用 cat 命令来查看这个文件的内容,操作如下:
$ cat names.txt
可以使用变量first_name
和second_name
来分别保存名单上第一位用户的名和姓氏,具体可以通过执行下面的 Awk 命令来实现:
$ awk '/Aaron/{ first_name=$2 ; second_name=$3 ; print first_name, second_name ; }' names.txt
再来看一个例子,当你在你的终端中输入命令 uname -a 时,它会显示出你的系统的全部信息,在输出的第二字段中包含了你的主机名,因此可以将这个主机名存储到一个名为 hostname 的变量里,然后通过 Awk 命令如下打印出来:
$ uname -a | awk '{hostname=$2 ; print hostname ; }'
二、数值表达式
在 Awk 语言中,可以通过使用一系列的数值运算符来构建数值表达式,这些运算符包括:
: 乘法
+
: 加法
/
: 除法
: 减法
%
: 取余(模)
^
: 乘方(指数)
数值表达式的构成格式为:
operand1 operator operand2
在上述表达式中,operand1
和operand2
可以是数值或者变量的名称,而operator
则可以是前文提到的任一运算符,下面是一些示例,展示了如何构建数值表达式:
counter=0 num1=5 num2=10 num3=num2-num1 counter=counter+1
要理解在 Awk 中数值表达式的运用,来看下面的例子,这个例子中用到了一个名为 domains.txt 的文件,这个文件列出了 Tecmint 所持有的所有域名。
news.tecmint.com tecmint.com linuxsay.com windows.tecmint.com tecmint.com news.tecmint.com tecmint.com linuxsay.com tecmint.com news.tecmint.com tecmint.com linuxsay.com windows.tecmint.com tecmint.com
要查看文件的内容,请使用以下命令:
$ cat domains.txt
如果想计算域 howtoing.com 在文件中出现的次数,可以编写一个简单的脚本来执行此操作,如下所示:
#!/bin/bash for file in $@; do if [ -f $file ] ; then #print out filename echo "File is: $file" #print a number incrementally for every line containing tecmint.com awk '/^tecmint.com/ { counter=counter+1 ; printf "%s ", counter ; }' $file else #print error info incase input is not a file echo "$file is not a file, please specify a file." >&2 && exit 1 fi done #terminate script with exit code 0 in case of successful execution exit 0
创建脚本后,保存它并使其可执行,当使用文件 domains.txt 作为输出运行它时,得到以下输出:
$ ./script.sh ~/domains.txt
从脚本的输出来看,domains.txt 文件中有 6 行包含 howtoing.com,以确认您可以手动计算它们。
三、赋值运算符
将探讨 Awk 的最后一个特性——赋值运算符,在 Awk 中,有多种赋值运算符,具体包括:
*=
: 表示乘法后赋值
+=
: 表示加法后赋值
/=
: 表示除法后赋值
-=
: 表示减法后赋值
%=
: 表示取余(模)后赋值
^=
: 表示乘方(指数)后赋值
在 Awk 中进行赋值操作的基本语法如下:
variable_name=variable_name operator operand
示例:
counter=0 counter=counter+1 num=20 num=num-1
您可以使用上面的赋值运算符来缩短 Awk 中的赋值操作,考虑前面的示例,可以按以下形式执行赋值:
variable_name operator=operand counter+=1
四、相关问题与解答栏目
Q1: 如何在 Awk 中使用变量?
A1: 在 Awk 中定义和使用变量的方法与 shell 类似,你可以用等号 (=
) 将值赋给变量,并在需要时引用这些变量。computer_name="tecmint.com"
,你还可以将变量用于保存字段的值,如first_name=$2
。
Q2: 如何在 Awk 中构建数值表达式?
A2: 在 Awk 中,数值表达式使用一系列运算符构建,如加法 (+
)、减法 ()、乘法 (
) 等,你可以写
counter=counter+1
来增加计数器的值,这些表达式可以包含数值或变量名称。
Q3: Awk 支持哪些赋值运算符?
A3: Awk 支持多种赋值运算符,包括*=
(乘法后赋值)、+=
(加法后赋值)、/=
(除法后赋值)、-=
(减法后赋值)、%=
(取余后赋值)和^=
(乘方后赋值),这些运算符允许你在一条语句中进行计算并赋值。
以上就是关于“awk 存储变量”的问题,朋友们可以点击主页了解更多内容,希望可以够帮助大家!
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/651964.html