sed和awk之间有什么区别?[已关闭]

发布时间 2023-11-10 21:08:54作者: 小满独家

内容来自 DOC https://q.houxu6.top/?s=sed和awk之间有什么区别?[已关闭]

  • awk和sed之间有什么区别?
  • sed和awk工具适用于哪些类型的应用场景?

sed是一种流编辑器。它按行处理字符流。它有一个简单的编程语言,包括类似goto的循环和简单的条件语句(除了模式匹配和地址匹配)。它实际上只有两个“变量”:模式空间和保持空间。脚本的可读性可能较差。数学运算在最好的情况下都非常麻烦。

不同版本的sed支持不同级别的命令行选项和语言特性。

awk以分隔字段为基础,按行处理。它具有更强大的编程结构,包括if/elsewhiledo/whilefor(C风格和数组迭代)。它完全支持变量和单维关联数组,还有(依我之见)笨拙的多维数组。数学运算类似于C语言。它有printf和函数。AWK中的“K”代表“Kernighan”,即《C程序设计语言》的作者“Kernighan and Ritchie”(也不能忘记Aho和Weinberger)。使用awk甚至可以编写学术抄袭检测器。

GNU awkgawk)有许多扩展功能,包括在最新版本中支持真正的多维数组。还有其他变种的awk,包括mawknawk

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

在文本中存在模式时,我倾向于使用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

当然,这些只是非常简单的示例,没有展示它们各自所能提供的全部功能范围。