diff --git a/translated/tech/awk/Part 13 - How to Write Scripts Using Awk Programming Language.md b/published/awk/Part 13 - How to Write Scripts Using Awk Programming Language.md similarity index 50% rename from translated/tech/awk/Part 13 - How to Write Scripts Using Awk Programming Language.md rename to published/awk/Part 13 - How to Write Scripts Using Awk Programming Language.md index b8508e8444..9373f28f1c 100644 --- a/translated/tech/awk/Part 13 - How to Write Scripts Using Awk Programming Language.md +++ b/published/awk/Part 13 - How to Write Scripts Using Awk Programming Language.md @@ -1,17 +1,19 @@ -如何使用 Awk 语言写脚本 - Part 13 +awk 系列:如何使用 awk 语言编写脚本 ==== -从 Awk 系列开始直到第 12 部分,我们都是在命令行或者脚本文件写一些简短的 Awk 命令和程序。 +![](http://www.tecmint.com/wp-content/uploads/2016/08/Write-Shell-Scripts-in-Awk.png) -然而 Awk 和 Shell 一样也是一个解释语言。通过从开始到现在的一系列的学习,你现在能写可以执行的 Awk 脚本了。 +从 awk 系列开始直到[第 12 部分][1],我们都是在命令行或者脚本文件里写一些简短的 awk 命令和程序。 -和写 shell 脚本差不多,Awk 脚本以下面这一行开头: +然而 awk 和 shell 一样也是一个解释型语言。通过从开始到现在的一系列的学习,你现在能写可以执行的 awk 脚本了。 + +和写 shell 脚本差不多,awk 脚本以下面这一行开头: ``` #! /path/to/awk/utility -f ``` -例如在我的系统上,Awk 工具安装在 /user/bin/awk 目录,所以我的 Awk 脚本以如下内容作为开头: +例如在我的系统上,awk 工具安装在 /user/bin/awk 目录,所以我的 awk 脚本以如下内容作为开头: ``` #! /usr/bin/awk -f @@ -19,13 +21,11 @@ 上面一行的解释如下: -``` -#! – 称为 Shebang,指明使用那个解释器来执行脚本中的命令 -/usr/bin/awk –解释器 --f – 解释器选项,用来指定读取的程序文件 -``` +- `#!` ,称为[释伴(Shebang)][2],指明使用那个解释器来执行脚本中的命令 +- `/usr/bin/awk` ,即解释器 +- `-f` ,解释器选项,用来指定读取的程序文件 -说是这么说,现在从下面的简单例子开始,让我们深入研究一些可执行的 Awk 脚本。使用你最喜欢的编辑器创建一个新文件,像下面这样: +说是这么说,现在从下面的简单例子开始,让我们深入研究一些可执行的 awk 脚本。使用你最喜欢的编辑器创建一个新文件,像下面这样: ``` $ vi script.awk @@ -35,7 +35,7 @@ $ vi script.awk ``` #!/usr/bin/awk -f -BEGIN { printf "%s\n","Writing my first Awk executable script!" } +BEGIN { printf "%s\n","Writing my first awk executable script!" } ``` 保存文件后退出,然后执行下面命令,使得脚本可执行: @@ -53,10 +53,10 @@ $ ./script.awk 输出样例: ``` -Writing my first Awk executable script! +Writing my first awk executable script! ``` -一个严格的程序员一定会问:“注释呢?”。是的,你可以在 Awk 脚本中包含注释。在代码中写注释是一种良好的编程习惯。 +一个严格的程序员一定会问:“注释呢?”。是的,你可以在 awk 脚本中包含注释。在代码中写注释是一种良好的编程习惯。 它有利于其它程序员阅读你的代码,理解程序文件或者脚本中每一部分的功能。 @@ -64,20 +64,20 @@ Writing my first Awk executable script! ``` #!/usr/bin/awk -f -#This is how to write a comment in Awk -#using the BEGIN special pattern to print a sentence -BEGIN { printf "%s\n","Writing my first Awk executable script!" } +# 这是如何在 awk 中写注释的示例 +# 使用特殊模式 BEGIN 来输出一句话 +BEGIN { printf "%s\n","Writing my first awk executable script!" } ``` -接下来我们看一个读文件的例子。我们想从帐号文件 /etc/passwd 中查找一个叫 aaronkilik 的用户,然后像下面这样打印用户名,用户的 ID,用户的 GID (译者注:组 ID): +接下来我们看一个读文件的例子。我们想从帐号文件 /etc/passwd 中查找一个叫 aaronkilik 的用户,然后像下面这样打印用户名、用户的 ID、用户的 GID (LCTT译注:组 ID): 下面是我们脚本文件的内容,文件名为 second.awk。 ``` #! /usr/bin/awk -f -#use BEGIN sepecial character to set FS built-in variable +# 使用 BEGIN 指定字符来设定 FS 内置变量 BEGIN { FS=":" } -#search for username: aaronkilik and print account details +# 搜索用户名 aaronkilik 并输出账号细节 /aaronkilik/ { print "Username :",$1,"User ID :",$3,"User GID :",$4 } ``` @@ -88,13 +88,13 @@ $ chmod +x second.awk $ ./second.awk /etc/passwd ``` -输出样例 +输出样例: ``` Username : aaronkilik User ID : 1000 User GID : 1000 ``` -在下面最后一个例子中,我们将使用 do while 语句来打印数字 0-10: +在下面最后一个例子中,我们将使用 `do while` 语句来打印数字 0-10: 下面是我们脚本文件的内容,文件名为 do.awk。 @@ -138,22 +138,24 @@ $ ./do.awk ### 总结 -我们已经到达这个精彩的 Awk 系列的最后,我希望你从整个 13 部分中学到了很多知识,把这些当作你 Awk 编程语言的入门指导。 +我们已经到达这个精彩的 awk 系列的最后,我希望你从整个 13 个章节中学到了很多知识,把这些当作你 awk 编程语言的入门指导。 -我一开始就提到过,Awk 是一个完整的文本处理语言,所以你可以学习很多 Awk 编程语言的其它方面,例如环境变量,数组,函数(内置的或者用户自定义的),等等。 +我一开始就提到过,awk 是一个完整的文本处理语言,所以你可以学习很多 awk 编程语言的其它方面,例如环境变量、数组、函数(内置的或者用户自定义的),等等。 -Awk 编程还有其它内容需要学习和掌握,所以在文末我提供了一些重要的在线资源的链接,你可以利用他们拓展你的 Awk 编程技能。但这不是必须的,你也可以阅读一些关于 Awk 的书籍。 +awk 编程还有其它内容需要学习和掌握,所以在文末我提供了一些重要的在线资源的链接,你可以利用他们拓展你的 awk 编程技能。但这不是必须的,你也可以阅读一些关于 awk 的书籍。 -如果你任何想要分享的想法或者问题,在下面留言。记得保持关注 Tecmint,会有更多的精彩内容。 +如果你任何想要分享的想法或者问题,在下面留言。记得保持关注我们,会有更多的精彩内容。 -------------------------------------------------------------------------------- via: http://www.tecmint.com/write-shell-scripts-in-awk-programming/ -作者:[Aaron Kili |][a] +作者:[Aaron Kili][a] 译者:[chunyang-wen](https://github.com/chunyang-wen) -校对:[校对者ID](https://github.com/校对者ID) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 [a]: http://www.tecmint.com/author/aaronkili/ +[1]: https://linux.cn/article-7723-1.html +[2]: https://linux.cn/article-3664-1.html \ No newline at end of file diff --git a/translated/tech/awk/part 12 - How to Use Flow Control Statements in Awk.md b/published/awk/part 12 - How to Use Flow Control Statements in Awk.md similarity index 73% rename from translated/tech/awk/part 12 - How to Use Flow Control Statements in Awk.md rename to published/awk/part 12 - How to Use Flow Control Statements in Awk.md index 1a04a887b7..15b17447cb 100644 --- a/translated/tech/awk/part 12 - How to Use Flow Control Statements in Awk.md +++ b/published/awk/part 12 - How to Use Flow Control Statements in Awk.md @@ -1,7 +1,7 @@ -如何使用 Awk 中的流控制语句 - part12 +awk 系列:如何在 awk 中使用流控制语句 ==== -回顾从 Awk 系列最开始到现在我们所讲的所有关于 Awk 的例子,你会发现不同例子中的所有命令都是顺序执行的,也就是一个接一个的执行。但是在某些场景下,我们可能希望根据一些条件来执行一些文本过滤,这个时候流控制语句就派上用场了。 +回顾从 Awk 系列,从最开始到现在我们所讲的所有关于 Awk 的例子,你会发现不同例子中的所有命令都是顺序执行的,也就是一个接一个的执行。但是在某些场景下,我们可能希望根据一些条件来执行一些[文本过滤操作][1],这个时候流控制语句就派上用场了。 ![](http://www.tecmint.com/wp-content/uploads/2016/08/Use-Flow-Control-Statements-in-Awk.png) @@ -17,7 +17,7 @@ Awk 包含很多的流控制语句,包括: - nextfile 语句 - exit 语句 -但是在这个系列中,我们将详细解释:if-else,for,while,do-while 语句。关于如何使用 next 语句,如果你们记得的话,我们已经在 Awk 系列的第6部分介绍过了。 +但是在这个系列中,我们将详细解释:`if-else`,`for`,`while`,`do-while` 语句。关于如何使用 `next` 语句,如果你们记得的话,我们已经在 [Awk 系列的第6部分][2]介绍过了。 ### 1. if-else 语句 @@ -36,7 +36,7 @@ actions2 当 condition1 满足时,意味着它的值是 true,此时会执行 actions1,if 语句退出,否则(译注:condition1 为 false)执行 actions2。 -if 语句可以扩展成如下的 if-else_if-else: +if 语句可以扩展成如下的 `if-else_if-else`: ``` if (condition1){ @@ -52,7 +52,7 @@ actions3 上面例子中,如果 condition1 为 true,执行 actions1,if 语句退出;否则对 condition2 求值,如果值为 true,那么执行 actions2,if 语句退出。然而如果 condition2 是 false,那么会执行 actions3 退出 if语句。 -下面是一个使用 if 语句的例子,我们有一个存储用户和他们年龄列表的文件,users.txt。 +下面是一个使用 if 语句的例子,我们有一个存储用户和他们年龄列表的文件 users.txt。 我们想要打印用户的名字以及他们的年龄是大于 25 还是小于 25。 @@ -85,7 +85,7 @@ $ chmod +x test.sh $ ./test.sh ``` -输出样例 +输出样例: ``` User Sarah L is more than 25 years old @@ -96,7 +96,7 @@ User Kili Seth is more than 25 years old ### 2. for 语句 -如果你想循环执行一些 Awk 命令,那么 for 语句十分合适,它的语法如下: +如果你想循环执行一些 Awk 命令,那么 `for` 语句十分合适,它的语法如下: 这里只是简单的定义一个计数器来控制循环的执行。首先你要初始化那个计数器 (counter),然后根据某个条件判断是否执行,如果该条件为 true 则执行,最后增加计数器。当计数器不满足条件时则终止循环。 @@ -106,7 +106,7 @@ actions } ``` -下面的 Awk 命令利用打印数字 0-10 来说明 for 语句是怎么工作的。 +下面的 Awk 命令利用打印数字 0-10 来说明 `for` 语句是怎么工作的。 ``` $ awk 'BEGIN{ for(counter=0;counter<=10;counter++){ print counter} }' @@ -130,7 +130,7 @@ $ awk 'BEGIN{ for(counter=0;counter<=10;counter++){ print counter} }' ### 3. while 语句 -传统的 while 语句语法如下: +传统的 `while` 语句语法如下: ``` while ( condition ) { @@ -138,7 +138,7 @@ actions } ``` -上面的 condition 是 Awk 表达式,actions 是当 condition 为 true 时执行的 Awk命令。 +上面的 condition 是 Awk 表达式,actions 是当 condition 为 true 时执行的 Awk 命令。 下面是仍然用打印数字 0-10 来解释 while 语句的用法: @@ -159,8 +159,7 @@ $ chmod +x test.sh $ ./test.sh ``` -输出样例 -Sample Output +输出样例: ``` 0 @@ -178,7 +177,7 @@ Sample Output ### 4. do-while 语句 -这个是上面的 while 语句语法的一个变化,其语法如下: +这个是上面的 `while` 语句语法的一个变化,其语法如下: ``` do { @@ -187,7 +186,7 @@ actions while (condition) ``` -二者的区别是,在 do-while 中,Awk 的命令在条件求值前先执行。我们使用 while 语句中同样的例子来解释 do-while 的使用,将 test.sh 脚本中的 Awk 命令做如下更改: +二者的区别是,在 `do-while` 中,Awk 的命令在条件求值前先执行。我们使用 `while` 语句中同样的例子来解释 `do-while` 的使用,将 test.sh 脚本中的 Awk 命令做如下更改: ``` #!/bin/bash @@ -238,10 +237,11 @@ via: http://www.tecmint.com/use-flow-control-statements-with-awk-command/ 作者:[Aaron Kili][a] 译者:[chunyang-wen](https://github.com/chunyang-wen) -校对:[校对者ID](https://github.com/校对者ID) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 [a]: http://www.tecmint.com/author/aaronkili/ - +[1]: http://www.tecmint.com/use-linux-awk-command-to-filter-text-string-in-files/ +[2]: http://www.tecmint.com/use-next-command-with-awk-in-linux/