问题标签 [mawk]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
401 浏览

shell - 如何在 awk 中定义新的命令或宏

我喜欢定义一个包装现有 awk 命令的新命令,例如print. 但是,我不想使用函数:

相反,我喜欢定义一个可以不带括号调用的新命令:

我可以想象的一种解决方案是使用预处理器,并且可以很好地设置 awk 脚本的 shebang 以调用此预处理器,然后调用 awk。但是,我更希望有一个纯粹的 awk 解决方案。

注意:该解决方案也应该在我使用的mawk中工作,因为它比vanilla GNU/awk快得多。

更新:讨论表明gawk(GNU/awk)可以非常快并且mawk不是必需的。

0 投票
1 回答
338 浏览

linux - 没有立即处理通过管道传输到 awk 的输出

考虑以下虚拟备份脚本:

和以下最小的启动脚本

我原以为“重新启动服务”输出会在一秒钟后出现,但在 Debian Wheezy 下运行时,它会在 6 秒后出现。

我的错误在哪里?为什么将“rsync 已完成”字符串写入标准输出时不直接处理 awk 操作?

0 投票
3 回答
160 浏览

bash - AWK 匹配列中的值并执行计算

我是 AWK 的新手,我正在努力为我的问题找出答案。我有一个包含以下值的平面文件:

我想使用 awk 比较当前行的 $1 和下一行的 $1,以及 $3 ~/f/. 如果语句为真,则从当前行的 $4 中减去下一行的 $4,并将差值写入当前行的新列,如果为假,则不执行任何操作。我到目前为止是这样的:

显然那是行不通的。有人可以帮忙吗?

0 投票
1 回答
688 浏览

bash - 在 Ubuntu 和 Mac 的 awk 命令中执行 switch/case 时出错

执行以下代码时遇到一个非常奇怪的问题:

收到以下错误:

知道有什么问题吗?

在 Mac 上测试:

输出:

在 Ubuntu 上测试:

输出:

0 投票
4 回答
5210 浏览

arrays - 我可以使用 -v 将数组传递给 awk 吗?

我希望能够将数组变量传递给awk. 我的意思不是 shell 数组,而是原生数组awk。我知道我可以像这样传递标量变量:

我可以使用相同的机制来定义awk数组吗?就像是:

我已经尝试了上述的一些变体,但它们都不能在我的 Debian 上的 GNU awk 4.1.1 上运行。那么,是否有任何版本的awk(gawk或其他任何东西) 可以接受来自交换机mawk的数组?-v

我知道我可以解决这个问题并且可以很容易地想到这样做的方法,我只是想知道是否有任何awk实现本身支持这种功能。

0 投票
1 回答
1120 浏览

linux - AWK:跳到下一个文件

我有很多数据文件要处理,但没有必要处理每个文件中的每条记录。有没有办法指示awk停止处理当前文件并跳到下一个文件?

0 投票
1 回答
63 浏览

bash - 为什么用不同的参数多次调用同一个函数会更慢

我已经建立了一个简单的 bash 脚本,它从数千个单词的列表中生成 4 个单词的随机密码。现在我不确定它对于我个人使用是否真的安全或有效,如果您考虑任何改进,请告诉我。但这不是重点。看看->

因此,当我在笔记本电脑上运行它时,输入和输出如下所示:

第二次:

有时可能很有趣。

无论如何,这是脚本:

看看我必须在哪里为每种类型的单词创建一个数组?3 种类型,3 个数组。好吧,我考虑过在一个函数中获取该代码,所以我只需要调用该函数 4 次,每个单词对应我的 4 个单词,并使用不同的参数。我真的以为它会更快。

这是代码更改:

现在这里是输入/输出:

然后再次:

时间上的差异并不是什么大问题,尽管总的来说,我认为它肯定会更快。

那么你知道为什么第二个脚本比第一个慢吗?

0 投票
1 回答
1817 浏览

linux - 不同的awk版本有什么区别?

我在这里阅读 awk,但我只是想知道 awk 版本,因为我之前遇到过不同 awk 的问题。下面是我所拥有的不同版本。据我了解,有 awk、mawk 和 gawk。gawk 是最新的/更好的。谁能澄清我的假设?我是最新最好的 GNU Awk 4.1.1,它是 gawk 吗?对不同版本还有其他意见吗?

env1 - 我的电脑上的 cygwin

env2 - 一个 docker 容器


编辑1

根据评论,单击 awk、gawk 和 mawk
gawk(GNU awk 的缩写)的标签是 awk 的免费实现,具有多种有用的扩展。
Mawk是 AWK 编程语言的实现和快速处理器。
AWK是一种解释性编程语言,专为文本处理而设计,通常用作数据提取和报告工具。仅当您的问题涉及使用 awk 或基于 awk 的 API进行编程时,才使用此标签。与使用或排除 awk 命令行选项本身有关的问题是题外话。

0 投票
2 回答
951 浏览

awk - MAWK:将 match() 存储在变量中

我尝试使用 MAWK,其中match()内置函数没有第三个变量值:

文档

var当以后我想像这样构造我的输出时,如何将此输出存储到一个名为的变量中?

EDIT2 - 完整示例:

输入文件结构:

解析器.awk:

预期输出:

我想在函数Id外调用变量。match()

MAWK 版本:

0 投票
2 回答
652 浏览

awk - gsub 代替翻译不起作用

我有一个字典dict,其中记录由“:”分隔,数据字段由新行分隔,例如:

现在我希望 awk 替换input 文件中每条记录的所有出现,例如

我的第一个 awk 脚本看起来像这样并且工作得很好:

给我:

不幸的是,另一个 dict 文件包含一些正则表达式使用的字符,所以我必须在我的脚本中替换转义字符。通过将 key 和 rep[key] 移动到一个字符串中(然后可以解析转义字符),脚本将只替换字典中的第二条记录。为什么?以及如何解决?

这是脚本的当前第二部分:

所有脚本都由awk -f translate.awk dict input

提前致谢!