学习如何使用Awk变量,数值表达式和赋值运算符 - 第8部分

在本文中,我们将深入研究Awk的领域,以使用变量,数字表达式和赋值运算符来处理更复杂的操作

awk命令系列越来越激动人心,我相信,在前面七个部分,我们通过awk的一些基础知识,你需要掌握,让你在Linux中执行一些基本的文字或字符串过滤走去。

本部分开始,我们将深入到awk中的地区提前处理更复杂的文字或字符串过滤操作。 因此,我们要覆盖awk的功能,如变量,数字表达式和赋值操作符。

学习Awk变量,数值表达式和赋值运算符

学习Awk变量,数值表达式和赋值运算符

这些概念与在许多编程语言中可能遇到的那些概念不完全不同,在这样的shell,C,Python和许多其他语言之前,所以没有必要担心这个主题,我们只是修改常见的使用方法这些提到的功能。

这大概是最简单的awk命令部分理解之一,所以坐下来,让走了。

Awk变量

在任何编程语言中,变量是存储值的占位符,当在程序文件中创建变量时,随着文件被执行,在存储器中创建一些空间将存储为变量指定的值。

您可以在您定义shell变量如下相同的方式定义awk的变量:

variable_name=value 

在上面的语法中:

  1. variable_name :是的名称你给一个变量
  2. value :存储在变量值

让我们看看下面的一些例子:

computer_name=”howtoing.com”
port_no=”22”
email=”admin@howtoing.com”
server=”computer_name”

看一看上面的简单的例子,在第一个变量的定义,该值howtoing.com被分配给变量computer_name

此外,值22被分配给变量port_no ,也可以将一个变量的值如在我们分配的值的最后一个例子赋给另一个变量computer_name到可变服务器。

如果你可以回想一下,直接从这个awk的系列的第二部分是我们覆盖的领域的编辑,我们谈到了如何用awk把输入线到字段,并使用标准的现场访问运算符, $读取已解析的不同领域。 我们还可以使用变量来存储字段的值,如下所示。

first_name=$2
second_name=$3

在上面的例子中,该值first_name设定为第二场和second_name被设置到第三场。

作为一个例子,考虑一个文件名为names.txt包含应用程序的用户显示其姓氏和名字加上性别的列表。 使用cat命令 ,我们可以按如下方式查看文件的内容:

$ cat names.txt
使用cat命令列出文件内容

使用cat命令列出文件内容

然后,我们也可以使用这些变量first_namesecond_name到列表上的第一个用户的第一和第二名字存储为通过运行下面的awk的命令:

$ awk '/Aaron/{ first_name=$2 ; second_name=$3 ; print first_name, second_name ; }' names.txt
使用Awk命令存储变量

使用Awk命令存储变量

让我们也来看看另一种情况,当你发出命令uname -a在终端上,它打印出所有的系统信息。

第二个字段包含您的hostname ,因此可以存储在一个变量称为主机 hostname ,并用awk如下打印:

$ uname -a
$ uname -a | awk '{hostname=$2 ; print hostname ; }' 
使用Awk将命令输出存储到变量

使用Awk将命令输出存储到变量

数值表达式

awk中,数字表达式使用以下数值运算符建:

  1. * :乘法运算符
  2. + :加法运算符
  3. / :除法运算符
  4. -减法运算符
  5. % :模运算符
  6. ^ :乘方运算

数值表达式的语法是:

$ operand1 operator operand2

在上面的表格, operand1operand2可以是数值或变量名,而operator是上述任何运营商。

下面是一些示例来演示如何构建数值表达式:

counter=0
num1=5
num2=10
num3=num2-num1
counter=counter+1

要了解在awk中使用数字表达式,我们应考虑下面的例子下面,文件domains.txt其中包含了Howtoing拥有的所有领域。

news.howtoing.com
howtoing.com
linuxsay.com
windows.howtoing.com
howtoing.com
news.howtoing.com
howtoing.com
linuxsay.com
howtoing.com
news.howtoing.com
howtoing.com
linuxsay.com
windows.howtoing.com
howtoing.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 howtoing.com 
awk  '/^howtoing.com/ { counter=counter+1 ; printf "%s\n", 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
用于计算文件中的字符串或文本的Shell脚本

用于计算文件中的字符串或文本的Shell脚本

创建脚本后,将其保存并使其可执行文件,当我们对文件运行它, domains.txt作为出输入,我们得到以下的输出:

$ ./script.sh  ~/domains.txt
计数字符串或文本的脚本

计数字符串或文本的脚本

从脚本的输出,有6条线路在文件domains.txt包含howtoing.com ,以确认您可以手动计数。

3.分配操作符

最后awk的功能,我们应覆盖是赋值操作符,也有几个awk中赋值运算符,这些包括以下内容:

  1. *= :乘法赋值运算符
  2. += :除了赋值运算符
  3. /= :除法赋值运算符
  4. -= :减法赋值运算符
  5. %= :模赋值运算符
  6. ^= :幂赋值运算符

awk中的赋值操作最简单的语法如下:

$ variable_name=variable_name operator operand

例子:

counter=0
counter=counter+1
num=20
num=num-1

您可以使用赋值运算符以上缩短awk的赋值操作,考虑前面的例子中,我们可以执行以下形式分配:

variable_name operator=operand
counter=0
counter+=1
num=20
num-=1

因此,我们可以改变我们使用上面刚刚编写的shell脚本awk命令+=赋值运算符如下:

#!/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 howtoing.com 
awk  '/^howtoing.com/ { counter+=1 ; printf  "%s\n",  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
改变Shell脚本

改变Shell脚本

在这部分的awk的系列中,我们讨论了一些功能强大的awk的功能,那就是变量,构建数字表达式,并使用赋值运算符,再加上我们如何实际使用它们某些少数插图。

这些概念与其他编程语言中的概念没有什么不同,但在Awk编程中可能有一些显着的区别。

第9部分中,我们将看到更多的awk的功能是特殊模式: BEGINEND 在此之前,保持连接到Howtoing。