我可以将我的命令(如 awk、sed)更新到 Solaris 中的最新版本吗?

我可以将我的命令(如 awk、sed)更新到 Solaris 中的最新版本吗?
 bash-3.00# awk '{print NR}' f1.txt
 1
 2
 3
 4

但 FNR 不打印任何内容。

awk '{print FNR}' f1.txt

上面的行没有给我任何输出,似乎我在 Sun 操作系统中拥有的 awk 没有 FNR 变量。那么我可以做一些事情来标准化它吗?另外,我可以获得所有最新命令的库并安装/更新我当前的命令,如 sed、sort 等。

SunOS 未知 5.10 Generic_142910-17 i86pc i386 i86pc

答案1

它不只是一个awk或多个版本。有许多 awk 实现,每个实现都有多个版本。所有 Unices 都有自己的内部维护工具集,以及随 Unix 一起提供的软件,并且使用这些工具通常依赖于该实现的精确版本。

如果您开始替换/usr/bin/awk为 GNU awk,可以从以下位置下载http://gnu.org,那么你就会遇到问题。

一些 Unices 确实打包了一些标准实用程序的替代版本或自由软件版本。通常,他们通过将它们安装在不同的位置(/opt/gnu例如对于 GNU 工具)或以不同的名称(gawk对于 GNU awk)安装来实现这一点。如果没有,您可以将它们作为源代码下载并构建它们,然后手动将它们安装在不同的位置或以不同的名称安装。

话虽如此,众所周知,Solaris 中包含一些实用程序的非常旧的非标准版本,/usr/bin并将现代/标准版本保留在另一个地方。

awk 就是这种情况。/usr/bin/awkSolaris 上的 awk 基于 1979 年的原始 awk。awk 大约在 1988 年被重写并称为nawk.所有现代awk实现都基于此nawk(因为这就是 POSIXawk规范的基础)。

在 Solaris 上,如果您更新您的系统$PATH以将自己置于标准/POSIX 环境中(通常涉及/usr/xpg4/bin和/或 /usr/xpg6/bin放在开头$PATH),则将awk是标准的。或者,您可以调用nawk而不是awk.

这与 相同sh,您可以使用/usr/xpg4/bin/shor ksh

在标准 sh 中(即不是 /bin/sh在 Solaris 上),您还可以使用

 command -p awk

请务必致电便携的awk 而不是旧的。

相关内容