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

时间:2014-01-22 16:55:43

标签: 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:


示例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

In mawk, I get the incorrect result:

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

2 个答案:

答案 0 :(得分:11)

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

恕我直言,格式化字符串%-s没有正确的结果,因为对齐字符串而不指定对齐它的宽度是没有意义的。关于length对它自己的含义也有不同的解释 - 它可能是length($0)的简写,或者它可能是非POSIX awk中的其他东西,甚至可能没有长度函数一些非POSIX awk因此可能将其作为未定义的变量名称。任何给定的awk如何处理非英文字符?

正如我所说 - 如果你打算使用非POSIX awk,你需要查看手册以获取所有血腥细节......

答案 1 :(得分:0)

我假设您正在使用不同的系统...因为系统上的awk安装用作gaw​​k或mawk的符号链接。

只要版本重合,所有awk版本都是兼容的。

因此,我认为您面临的问题是由于使用了较旧版本和较新版本的程序。