awk的区别是什么 sed呢? 什么样的应用最好用 sed和awk工具的案例?


当前回答

Sed是一个流编辑器。它以每行为基础处理字符流。它有一个基本的编程语言,包括goto风格的循环和简单的条件语句(除了模式匹配和地址匹配)。本质上只有两个“变量”:模式空间和保持空间。脚本的可读性可能很困难。数学运算是极其笨拙的。

有各种版本的sed,它们对命令行选项和语言特性的支持程度各不相同。

awk is oriented toward delimited fields on a per-line basis. It has much more robust programming constructs including if/else, while, do/while and for (C-style and array iteration). There is complete support for variables and single-dimension associative arrays plus (IMO) kludgey multi-dimension arrays. Mathematical operations resemble those in C. It has printf and functions. The "K" in "AWK" stands for "Kernighan" as in "Kernighan and Ritchie" of the book "C Programming Language" fame (not to forget Aho and Weinberger). One could conceivably write a detector of academic plagiarism using awk.

GNU awk (gawk)有许多扩展,包括最新版本中的真正的多维数组。awk还有其他变体,包括mawk和nawk。

这两个程序都使用正则表达式来选择和处理文本。

我倾向于在文本中有模式的地方使用sed。例如,您可以替换某些文本中以“负号后面跟着一串数字”的形式出现的所有负数。"-231.45")与"会计方括号"表格(例如:"(231.45)")使用这个(有改进空间):

sed 's/-\([0-9.]\+\)/(\1)/g' inputfile

当文本看起来更像行和列时,我将使用awk,因为awk将它们称为“记录”和“字段”。如果我要做类似于上面的操作,但只在一个简单的逗号分隔文件中的第三个字段上,我可能会这样做:

awk -F, 'BEGIN {OFS = ","} {gsub("-([0-9.]+)", "(" substr($3, 2) ")", $3); print}' inputfile

当然,这些只是非常简单的例子,并不能说明它们各自所提供的全部功能。

其他回答

1) awk和sed的区别是什么?

两者都是转换文本的工具。但是awk除了操作文本之外还可以做更多的事情。它本身就是一种编程语言,包含了你在编程中学到的大部分东西,比如数组、循环、if/else流控制等等。你也可以在sed中“编程”,但是你不会想要维护用它写的代码。

2)哪种应用程序是sed和awk工具的最佳用例?

结论:使用sed进行非常简单的文本解析。除此之外,awk更好。事实上,您可以完全抛弃sed,只使用awk。因为它们的功能是重叠的,awk可以做的更多,所以使用awk就可以了。你也可以缩短你的学习曲线。

Sed是一个流编辑器。它以每行为基础处理字符流。它有一个基本的编程语言,包括goto风格的循环和简单的条件语句(除了模式匹配和地址匹配)。本质上只有两个“变量”:模式空间和保持空间。脚本的可读性可能很困难。数学运算是极其笨拙的。

有各种版本的sed,它们对命令行选项和语言特性的支持程度各不相同。

awk is oriented toward delimited fields on a per-line basis. It has much more robust programming constructs including if/else, while, do/while and for (C-style and array iteration). There is complete support for variables and single-dimension associative arrays plus (IMO) kludgey multi-dimension arrays. Mathematical operations resemble those in C. It has printf and functions. The "K" in "AWK" stands for "Kernighan" as in "Kernighan and Ritchie" of the book "C Programming Language" fame (not to forget Aho and Weinberger). One could conceivably write a detector of academic plagiarism using awk.

GNU awk (gawk)有许多扩展,包括最新版本中的真正的多维数组。awk还有其他变体,包括mawk和nawk。

这两个程序都使用正则表达式来选择和处理文本。

我倾向于在文本中有模式的地方使用sed。例如,您可以替换某些文本中以“负号后面跟着一串数字”的形式出现的所有负数。"-231.45")与"会计方括号"表格(例如:"(231.45)")使用这个(有改进空间):

sed 's/-\([0-9.]\+\)/(\1)/g' inputfile

当文本看起来更像行和列时,我将使用awk,因为awk将它们称为“记录”和“字段”。如果我要做类似于上面的操作,但只在一个简单的逗号分隔文件中的第三个字段上,我可能会这样做:

awk -F, 'BEGIN {OFS = ","} {gsub("-([0-9.]+)", "(" substr($3, 2) ")", $3); print}' inputfile

当然,这些只是非常简单的例子,并不能说明它们各自所提供的全部功能。

这两种工具都是用来处理文本的,而且这两种工具都可以用于一些任务。

对我来说,区分它们的规则是:使用sed来自动执行在文本编辑器中手动执行的任务。这就是为什么它被称为流编辑器。(您可以使用相同的命令在vim中编辑文本)。如果你想分析文本,计数字段,计算总数,提取和重组结构等,可以使用awk。

此外,您不应该忘记grep。如果您只想搜索/提取文本(文件)中的内容,请使用grep