致编辑的信
我曾经是SPARC用户,直到遇到硬件问题。我发现SPARC硬件很难获得服务;小型站点最终用户似乎得不到SUN的大力支持。
Linux/x86 世界恰恰相反。这里有一个非常有竞争力的市场,在所有价格/性能范围内提供各种各样的选择。它创造了一个真正经济实惠的Unix计算系统。
我希望Linux社区能够坚持使用x86,而不是让Linux仅仅成为那些昂贵的专有盒子上的另一块软件。
—Siuki Chan siuki.chan@xilinx.com
当Unix首次编写时,它是为PDP-7编写的(并用汇编语言编写)。随后移植到其他硬件帮助Unix变成了今天这种机器独立的系统。与Unix 25年的历史及其机器独立性相关联的是额外的开销。
Linux提供了一个全新的开始。将Linux移植到其他架构可以使一种新的机器无关的操作系统得到普遍使用。虽然今天很多人认为x86是正确的答案,但我确信人们对PDP-11(它是Unix的第二个平台)也有同样的感觉。现在将可移植性设计到Linux中意味着它将更容易在未来的硬件上运行——无论是基于SPARC、DEC Alpha、MIPS还是全新的东西。
—Haykel Ben Jemia haykel@cs.tu-berlin.de
我想说我真的很喜欢LJ,并且通过它我每个月都能学到关于Linux的新知识。在第25期(1996年5月)中,我发现Gawk 入门这篇文章非常有趣,因为我经常使用Gawk。但是在尝试时,我注意到FS语句的输出有些问题。文章指出
{ FS=":" print $5 }
和
BEGIN { FS=":" } { print $5 }
在功能上是相同的,除了第一个速度较慢。
但是当我执行第一个程序时,第一行是空白的。使用第二个程序,一切正常。所以我向 Red Hat 邮件列表(因为我使用 Red Hat 发行版)询问是否有人可以帮助我。Marc Ewing 提供了这个问题的真正答案
在规则被评估之前,该行被拆分为字段,因此当第一次评估 FS=":" 时,该行已经被拆分,要么不存在第五个字段,要么在某些情况下字段是错误的。因此,这两个 awk 程序在功能上并不相同;第一个程序是不正确的。
我希望这些信息对某些人有用。
在Linux Journal第25期中,lcc 编译器得到了评论 [Awk 入门,作者 Ian Gordon],并且 lcc 的 FTP 站点被列为 ftp://ftp.cs.princeton.edu/pub/lcc/。但是,我只能找到 lcc 到 Linux 的 a.out 端口。有人在致力于 lcc 中的 ELF 支持吗?
—Arthur D. Jerijian
文件 ftp://ftp.cs.princeton.edu/pub/lcc/contrib/linux-elf.tar.gz 的日期是 1995 年 11 月 14 日,因此 lcc 的 Linux ELF 支持已经存在一段时间了。
致编辑
我想评论一下 Ian Gordon 在五月Linux Journal上发表的关于 gawk 的文章 {Awk 入门]。总的来说,这是一篇很好的 awk 编程入门文章,但我希望您能让我先审阅一下。
文章中存在许多小的和不太小的错误。按出现顺序排列
1. Brian Kernighan 不是 C 语言的原始设计者之一;他“仅仅”与设计和实现了 C 语言的 Dennis Ritchie 合著了关于 C 语言的书。(这绝不会削弱他的地位;Brian 仍然是 Unix 和 C 世界中非常重要和有影响的人物。)
2. 文章说,“gawk 还定义了几个特殊的模式,它们根本不匹配任何输入,最常用的是 BEGIN 和 END”。这是不正确的。awk 中只定义了 BEGIN 和 END,没有其他模式。
3. “如果您尝试引用超出 NF 的字段,它们的值将为 NULL”这句话,如果从字面上理解,会产生误导。该值是空字符串或空字符串,通常表示为 ""。当然,大多数程序员类型的人会从字面上理解这句话,也许我只是在吹毛求疵。
4. 在描述使用冒号作为字段分隔符的部分中存在重大错误。
{ FS = ":" print $5 }
在 gawk 中,字段拆分发生在记录被读取时 FS 的值。因此,$5 将已经根据 FS 的先前值(大概是一个空格," ")确定。Unix 版本的 awk 错误地执行此操作,将字段拆分延迟到需要字段时,但使用当前的 FS 值执行此操作。这是不正确的,并且 awk 的 POSIX 标准规定字段拆分应以 gawk(和 mawk,见下文)的方式进行。事实上,我的书(在 RESOURCES 侧边栏中引用,谢谢!)描述了完全相同的问题。
获得所需行为的正确方法是使用 -F 选项或在 BEGIN 块内使用赋值来设置 FS,如稍后所述。
5. 一些错别字:“does not contain a seven field”应该是“seventh”,而“modifing”应该是“modifying”。还有一个小问题。将 Info 文件称为“page”具有误导性。打印时,当前文档超过 330 页...
6. 在谈到变量初始化时,文章说“... 将其设置为整数的 0 或字符串的 "",分别。” 不完全是。变量的数值初始化为 0,字符串值初始化为 ""。awk 中的所有数字在内部都以 C double 类型维护。看起来像整数的数字仍然存储为 double 类型。这可能会给 C 程序员带来困惑
x = 5 / 4 # x is now 1.25, not 1, no integer truncation
(我自己也曾被这个问题困扰!)
7. 对数组“for”循环的讨论是不完整的。
for (i in theArray) print i
打印 theArray 中的每个索引。要同时获取索引和相应的值,您需要类似 8 的东西。
for (i in theArray) print i, theArray[i]
关于实现速度以及与 Perl 的比较。有三个免费提供的 awk 实现:Bell Labs 版本、gawk 和 mawk。Gawk 比 Bell Labs 版本快得多。Michael Brennan 的 Mawk(从 oxy.edu 的 ftp 获取)是一个非常好的实现,它(通常)甚至比 gawk 更快。虽然我没有做过任何计时,但我愿意打赌,用 mawk 运行的 awk 程序每次都能让可比较的 Perl 程序真正地物有所值。Gawk 相对于 mawk 的优势在于其附加功能、更多系统的端口以及其全面的文档。Mawk 的优势在于其速度和坚如磐石的稳定性。
9. 在资源块中,来自 FSF 的 gawk 文档的标题现在是 GNU Awk 用户指南,只有我本人被列为作者。由于手册发生了重大变化(现在大约是以前大小的两倍),我们更改了标题,并且我被列为作者,因为指南中所有新的和经过大量修订的材料。标题页确实在应有的地方给予了肯定,上面写着“基于 Gawk 手册,作者是 Close、Robbins、Rubin 和 Stallman。”
最后,我想指出的是,许多 Linux 发行版显然还没有最新的 3.0.0 版本;应该从 GNU 镜像站点获取。与以前的版本相比,新版本有大量很棒的新功能和错误修复,以及修订后的手册。
请接受这篇笔记作为对一篇原本令人愉快的文章的建设性评论,我希望我有时间写这篇文章...
谢谢,
—Arnold Robbins gawk 维护者和文档编写者 arnold@gnu.ai.mit.edu