sed 和 awk 有啥区别? [关闭]

     2023-03-15     253

关键词:

【中文标题】sed 和 awk 有啥区别? [关闭]【英文标题】:What is the difference between sed and awk? [closed]sed 和 awk 有什么区别? [关闭] 【发布时间】:2010-12-10 13:36:24 【问题描述】: awk 有什么区别 和 sed 吗? 最好使用什么样的应用程序 sed 和 awk 工具的案例?

【问题讨论】:

有关 unix.stackexchange 的相关 QA:Is there a basic tutorial for grep, awk and sed? pediaa.com/difference-between-sed-and-awk/… 【参考方案1】:

1) awk 和 sed 有什么区别?

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

2) 什么样的应用程序是 sed 和 awk 工具的最佳用例?

结论:使用 sed 进行非常简单的文本解析。除此之外,awk 更好。事实上,你可以完全放弃 sed 而只使用 awk。由于它们的功能重叠并且 awk 可以做更多的事情,所以只需使用 awk。您也会减少学习曲线。

【讨论】:

我发现 sed 更容易学习,所以你需要考虑到这一点。当您学习掌握 awk 时,快速学习 sed 以便能够更快地使用它来处理您可能还不知道如何在 awk 中做的事情可能会很有用。 Don't ditch sed, 's/search/replace'awk 的语法更容易输入,并且是您大部分时间需要的。 最好使用混合物。例如,如果您要在一个大文件中查找模式,请使用 grep 查找行号,然后使用 sed 编辑该行。否则,sed 处理整个文件的速度会慢很多。 如果您是一名工匠,您将学习如何使用所有工具,并且知道何时使用。如果您只是在修理东西,那么您可能只需要一把锤子和一把螺丝刀。【参考方案2】:

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

sed 有多种版本,对命令行选项和语言功能的支持程度不同。

awk 面向以每行为基础的分隔字段。它具有更强大的编程结构,包括if/elsewhiledo/whilefor(C 风格和数组迭代)。完全支持变量和单维关联数组以及 (IMO) kludgey 多维数组。数学运算类似于 C 中的运算。它具有printf 和函数。 “AWK”中的“K”代表“Kernighan”,就像“C Programming Language”一书的“Kernighan and Ritchie”一样(不要忘记Aho和 Weinberger)。可以想象,使用awk 编写学术抄袭检测器。

GNU awk (gawk) 有许多扩展,包括最新版本中的真正多维数组。 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

当然,这些只是非常简单的示例,并不能说明每个示例必须提供的全部功能。

【讨论】:

查看一些突破sed界限的例子:sed.sourceforge.net/#scripts @DennisWilliamson - 如果我只学习 awk 我会处于劣势吗? awk 比 sed 更常用吗? @blasto:我的建议是两者都学,但更强调 awk。许多正则表达式内容适用于两者(以及其他工具和语言)。将 sed 用于简单的东西,并尽量避免复杂的东西。可以在 sed 中执行循环和分支真的很酷,但是生成的命令行很复杂且难以阅读。你的问题的答案真的取决于你在做什么。 @DennisWilliamson - 什么对 ETL 开发人员最有用? ETL 或提取转换和加载是一个数据仓库术语。粗略地说,这项工作涉及从不同的不同来源(例如 DB、excel 文件、csv 文件等)中提取数据,对相同的数据进行转换,然后加载到数据仓库 (DW) 中进行分析,查找数据中的模式,或者只是历史记录。例如。 DW 的最终用途 - 将算法应用于杂货店的 DW,其中包含过去 10 年的数据,可能会发现倾向于购买苹果的人也会购买橙子或类似的东西。 对于在 Mac 上遇到此问题的任何人来说,仅供参考,请尝试 "sed -E 's/-([0-9]+.[0-9]*)/(\1)/ g'" 用于第一个 sed 示例【参考方案3】:

这两种工具都用于处理文本,并且两种工具都可以用于某些任务。

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

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

【讨论】:

sed和awk的用法以及区别

        sed主要处理“行问题”。        awk主要处理“列问题”。        sed实例:sed-n"2p"/file &nbs 查看详情

处置和关闭有啥区别? [复制]

】处置和关闭有啥区别?[复制]【英文标题】:WhatisthedifferencebetweenDisposeandClose?[duplicate]处置和关闭有什么区别?[复制]【发布时间】:2011-03-1402:39:59【问题描述】:可能重复:CloseandDispose-whichtocall?嗨,看了一些网页,还是不明... 查看详情

URLRequest 和 URL 有啥区别? [关闭]

】URLRequest和URL有啥区别?[关闭]【英文标题】:WhatisthedifferencebetweenURLRequestandURL?[closed]URLRequest和URL有什么区别?[关闭]【发布时间】:2017-12-1212:13:22【问题描述】:我正在使用URLSession下载文件。有两种方法:downloadTask(withrequest:U... 查看详情

QEMU 和 VirtualBox 有啥区别? [关闭]

】QEMU和VirtualBox有啥区别?[关闭]【英文标题】:WhatarethedifferencesbetweenQEMUandVirtualBox?[closed]QEMU和VirtualBox有什么区别?[关闭]【发布时间】:2017-09-2800:39:33【问题描述】:最近,我发现有QEMU项目。我以前用过VirtualBox,也知道Xen和VM... 查看详情

下面的两个 sed 命令有啥区别?

】下面的两个sed命令有啥区别?【英文标题】:Whatisthedifferenceb/wtwosedcommandsbelow?下面的两个sed命令有什么区别?【发布时间】:2016-07-1315:37:15【问题描述】:关于我工作环境的信息:$uname-aAIXprd2311600C6B1F74C00$oslevel-s6100-03-10-1119代... 查看详情

useContext 和 Redux 有啥区别? [关闭]

】useContext和Redux有啥区别?[关闭]【英文标题】:What\'sthedifferencebetweenuseContextandRedux?[closed]useContext和Redux有什么区别?[关闭]【发布时间】:2020-05-2916:09:13【问题描述】:useContext和Redux有什么区别?Redux就像useContext?当我在我的... 查看详情

命名空间和类有啥区别? [关闭]

】命名空间和类有啥区别?[关闭]【英文标题】:What\'sthedifferencebetweennamespaces&classes?[closed]命名空间和类有什么区别?[关闭]【发布时间】:2014-09-1813:12:05【问题描述】:在C++13/4环境下,命名空间和类有什么区别?我的看法;... 查看详情

云、网格和集群有啥区别? [关闭]

】云、网格和集群有啥区别?[关闭]【英文标题】:WhatisthedifferencebetweenCloud,GridandCluster?[closed]云、网格和集群有什么区别?[关闭]【发布时间】:2012-04-0103:45:12【问题描述】:云、集群和网格有什么区别?请举一些例子,因为云... 查看详情

算法和函数有啥区别? [关闭]

】算法和函数有啥区别?[关闭]【英文标题】:Whatisthedifferencebetweenanalgorithmandafunction?[closed]算法和函数有什么区别?[关闭]【发布时间】:2011-03-2410:02:10【问题描述】:它们是一样的吗?【问题讨论】:食谱和美味蛋糕有什么区... 查看详情

Hyperledger Fabric 和 Sawtooth 有啥区别? [关闭]

】HyperledgerFabric和Sawtooth有啥区别?[关闭]【英文标题】:What\'sthedifferencebetweenHyperledgerFabricandSawtooth?[closed]HyperledgerFabric和Sawtooth有什么区别?[关闭]【发布时间】:2018-04-1122:42:07【问题描述】:HyperledgerFabric和HyperledgerSawtooth都是... 查看详情

UILocalnotification 和委托有啥区别? [关闭]

】UILocalnotification和委托有啥区别?[关闭]【英文标题】:WhatisthedifferencebetweenUILocalnotificationanddelegates?[closed]UILocalnotification和委托有什么区别?[关闭]【发布时间】:2013-05-1406:30:00【问题描述】:我有一个应用程序,我想在该应用... 查看详情

算法设计和算法分析有啥区别? [关闭]

】算法设计和算法分析有啥区别?[关闭]【英文标题】:Whatisthedifferencebetweenthedesignofalgorithmsandtheanalysisofalgorithms?[closed]算法设计和算法分析有什么区别?[关闭]【发布时间】:2017-07-2419:38:16【问题描述】:我是算法新手。算法的... 查看详情

OpenSSL 和 LetsEncrypt 有啥区别? [关闭]

】OpenSSL和LetsEncrypt有啥区别?[关闭]【英文标题】:WhatsthedifferencebetweenOpenSSLandLetsEncrypt?[closed]OpenSSL和LetsEncrypt有什么区别?[关闭]【发布时间】:2017-12-0415:58:25【问题描述】:过去我们在工作中使用过LetsEncrypt,但我们使用的nginx... 查看详情

MongoDB和Redis有啥区别? [关闭]

】MongoDB和Redis有啥区别?[关闭]【英文标题】:WhatarethedifferencesbetweenMongoDBandRedis?[closed]MongoDB和Redis有什么区别?[关闭]【发布时间】:2011-09-2017:08:13【问题描述】:只是寻找人们在两者之间进行选择时认为的主要区别。【问题讨... 查看详情

操作系统和内核有啥区别? [关闭]

】操作系统和内核有啥区别?[关闭]【英文标题】:Whatisthedifferencebetweentheoperatingsystemandthekernel?[closed]操作系统和内核有什么区别?[关闭]【发布时间】:2011-03-1922:43:51【问题描述】:我不明白操作系统和内核之间的区别。谁能解... 查看详情

RSpec 和 Cucumber 有啥区别? [关闭]

】RSpec和Cucumber有啥区别?[关闭]【英文标题】:What\'sthedifferencebetweenRSpecandCucumber?[closed]RSpec和Cucumber有什么区别?[关闭]【发布时间】:2012-07-3012:37:37【问题描述】:我有6个月的Rails开发经验。我已经构建了一个正在使用的Web应... 查看详情

支付网关和marchant网关有啥区别? [关闭]

】支付网关和marchant网关有啥区别?[关闭]【英文标题】:whatisthedifferencebetweenpaymentgatewayandmarchantgateway?[closed]支付网关和marchant网关有什么区别?[关闭]【发布时间】:2012-10-3022:05:45【问题描述】:支付网关和marchant网关有什么区... 查看详情

操作系统“交换”和“页面”有啥区别? [关闭]

】操作系统“交换”和“页面”有啥区别?[关闭]【英文标题】:What\'sthedifferencebetweenoperatingsystem"swap"and"page"?[closed]操作系统“交换”和“页面”有什么区别?[关闭]【发布时间】:2010-12-1322:08:34【问题描述】:操... 查看详情