gawk和mawk之间的区别(列宽)

Ted*_*345 4 awk gawk

我有一个文件:

To jest d?ugi string z wieloma polskimi literami ?ó???? kodowany w UTF8, 
?eby 
by?o ?mieszniej, haha.
?
a
Run Code Online (Sandbox Code Playgroud)

示例gawk:

gawk '{printf "%-80s %-s\n", $0, length}' file
Run Code Online (Sandbox Code Playgroud)

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

To jest d?ugi string z wieloma polskimi literami ?ó???? kodowany w UTF8,         73
?eby                                                                             5
by?o ?mieszniej, haha.                                                           22
?                                                                                1
a                                                                                1
Run Code Online (Sandbox Code Playgroud)

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


示例mawk:

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
Run Code Online (Sandbox Code Playgroud)

在mawk中,我得到了错误的结果:

由于mawk获得与gawk相同的结果?

Ed *_*ton 12

mawk是一个功能最小的awk,专为执行功能而设计.你不应该期望它的行为与gawk或POSIX awk完全相同.如果你打算使用mawk,你需要获得描述IT行为方式的mawk手册,不要依赖描述其他awks行为的任何其他文档.

恕我直言,格式化字符串没有正确的结果,%-s因为没有指定一个宽度来对齐它是没有意义的.还有什么不同的解释length在它自己的意思-这可能是短期的手length($0),也可能是在非POSIX awk的别的东西,有可能甚至在一些非POSIX awk的长度的功能,所以它可能需要那是一个未定义的变量名.任何给定的awk如何处理非英文字符?

正如我所说 - 如果你打算使用非POSIX awk,你需要检查手册中的所有血腥细节......

  • @teppic - 我担心不是.虽然[mawk的手册页](http://invisible-island.net/mawk/manpage/mawk.html#h3-3_-Regular-expressions)声称它支持扩展正则表达式,但mawk无法实现POSIX字符类,如在版本1.3.4之前,`[:digit:]`,`[:upper:]`,`[:lower:]`等等,以及许多目前随1.3.3版本发布的Linux发行版.所以..在实践中不符合POSIX标准. (6认同)