该越来越激动人心,我相信,在前面七个部分,我们通过awk的一些基础知识,你需要掌握,让你在Linux中执行一些基本的文字或字符串过滤走去。
本部分开始,我们将深入到awk中的地区提前处理更复杂的文字或字符串过滤操作。 因此,我们要覆盖awk的功能,如变量,数字表达式和赋值操作符。
学习Awk变量,数值表达式和赋值运算符
这些概念与在许多编程语言中可能遇到的那些概念不完全不同,在这样的shell,C,Python和许多其他语言之前,所以没有必要担心这个主题,我们只是修改常见的使用方法这些提到的功能。
这大概是最简单的awk命令部分理解之一,所以坐下来,让走了。
Awk变量
在任何编程语言中,变量是存储值的占位符,当在程序文件中创建变量时,随着文件被执行,在存储器中创建一些空间将存储为变量指定的值。
您可以在您定义shell变量如下相同的方式定义awk的变量:
variable_name=value
在上面的语法中:
-
variable_name
:是的名称你给一个变量 -
value
:存储在变量值
让我们看看下面的一些例子:
computer_name=”youcl.com” port_no=”22” email=”admin@youcl.com” server=”computer_name”
看一看上面的简单的例子,在第一个变量的定义,该值youcl.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命令列出文件内容
然后,我们也可以使用这些变量first_name
和second_name
到列表上的第一个用户的第一和第二名字存储为通过运行下面的awk的命令:
$ awk '/Aaron/{ first_name=$2 ; second_name=$3 ; print first_name, second_name ; }' names.txt
使用Awk命令存储变量
让我们也来看看另一种情况,当你发出命令uname -a
在终端上,它打印出所有的系统信息。
第二个字段包含您的hostname
,因此可以存储在一个变量称为主机 hostname
,并用awk如下打印:
$ uname -a $ uname -a | awk '{hostname=$2 ; print hostname ; }'
使用Awk将命令输出存储到变量
数值表达式
在awk中,数字表达式使用以下数值运算符建:
-
*
:乘法运算符 -
+
:加法运算符 -
/
:除法运算符 -
-
减法运算符 -
%
:模运算符 -
^
:乘方运算
数值表达式的语法是:
$ operand1 operator operand2
在上面的表格, operand1
和operand2
可以是数值或变量名,而operator
是上述任何运营商。
下面是一些示例来演示如何构建数值表达式:
counter=0 num1=5 num2=10 num3=num2-num1 counter=counter+1
要了解在awk中使用数字表达式,我们应考虑下面的例子下面,文件domains.txt
其中包含了youcl拥有的所有领域。
news.youcl.com youcl.com linuxsay.com windows.youcl.com youcl.com news.youcl.com youcl.com linuxsay.com youcl.com news.youcl.com youcl.com linuxsay.com windows.youcl.com youcl.com
要查看文件的内容,请使用以下命令:
$ cat domains.txt
查看文件的内容
如果我们要计算域的次数youcl.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 youcl.com awk '/^youcl.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脚本
创建脚本后,将其保存并使其可执行文件,当我们对文件运行它, domains.txt
作为出输入,我们得到以下的输出:
$ ./script.sh ~/domains.txt
计数字符串或文本的脚本
从脚本的输出,有6条线路在文件domains.txt
包含youcl.com
,以确认您可以手动计数。
3.分配操作符
最后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=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 youcl.com awk '/^youcl.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脚本
在这部分的中,我们讨论了一些功能强大的awk的功能,那就是变量,构建数字表达式,并使用赋值运算符,再加上我们如何实际使用它们某些少数插图。
这些概念与其他编程语言中的概念没有什么不同,但在Awk编程中可能有一些显着的区别。
在第9部分中,我们将看到更多的awk的功能是特殊模式: BEGIN
和END
。 在此之前,保持连接到youcl。