awk - gawk 和 mawk 的区别(列宽)

标签 awk gawk

我有一个文件:

To jest długi string z wieloma polskimi literami ąółżęś kodowany w UTF8, 
żeby 
było śmieszniej, haha.
ą
a

gawk 示例:

gawk '{printf "%-80s %-s\n", $0, length}' file

在 gawk 中,我得到了正确的结果:

To jest długi string z wieloma polskimi literami ąółżęś kodowany w UTF8,         73
żeby                                                                             5
było śmieszniej, haha.                                                           22
ą                                                                                1
a                                                                                1

In gawk, I get the correct result:

<小时/>

ma​​wk 示例:

mawk '{printf "%-80s %-s\n", $0, length}' file
To jest długi string z wieloma polskimi literami ąółżęś kodowany w UTF8,  80
żeby                                                                            6
było śmieszniej, haha.                                                         24
ą                                                                               2
a                                                                                1

In mawk, I get the incorrect result:

mawk 得到的结果与 gawk 相同吗?

最佳答案

mawk 是一个功能最少的 awk,其设计目的是为了执行速度而不是功能。您不应期望它的行为与 gawk 或 POSIX awk 完全相同。如果您要使用 mawk,您需要获得 mawk manual 描述 IT 行为方式,请勿依赖任何其他描述其他 awks 行为方式的文档。

恕我直言,格式化字符串 %-s 没有正确的结果,因为在不指定对齐宽度的情况下对齐字符串是没有意义的。对于 length 本身的含义也有不同的解释 - 它可能是 length($0) 的简写,也可能是非 POSIX awk 中的其他内容,在某些非 POSIX awk 中甚至可能没有长度函数,因此它可能会将其视为 undefined variable 名。任何给定的 awk 如何处理非英语字符?

正如我所说 - 如果您要使用非 POSIX awk,您需要查看该 awk 的手册以了解所有详细信息...

关于awk - gawk 和 mawk 的区别(列宽),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21289110/

相关文章:

regex - 如何使用awk轻松过滤日志?

正则表达式命令行更改每行的格式

linux - Sed 4.2.1 的编译问题

linux - 如何编辑 CSV 文件中的单元格

linux - 我什么时候应该使用 sed 什么时候应该使用 awk

date - 从日志文件中获取最后 5 分钟

regex - 使用 awk 将特定子字符串与正则表达式匹配

bash - 如何输出按用户排序的命令列表?

awk 和 log2 除法

unix - AWK - 如果不在数组中