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

mun*_*ish 2 solaris awk shell-script

 bash-3.00# awk '{print NR}' f1.txt
 1
 2
 3
 4
Run Code Online (Sandbox Code Playgroud)

但 FNR 不打印任何内容。

awk '{print FNR}' f1.txt
Run Code Online (Sandbox Code Playgroud)

上面的行没有给我任何输出,似乎我在 sun os 中使用的 awk 没有 FNR 变量。所以我可以做些什么来标准化它。另外,我可以获取所有最新命令的库并安装/更新我当前的命令,如 sed、sort 等。

SunOS 未知 5.10 Generic_142910-17 i86pc i386 i86pc

Sté*_*las 7

它不仅有一个awk和多个版本。有许多 awk 实现,每个实现都有多个版本。所有的 Unices 都有自己的工具集,它们在内部维护,以及一个 Unix 附带的软件,并且使用这些工具通常依赖于那些是该实现的确切版本。

如果您开始替换/usr/bin/awk为可从http://gnu.org下载的 GNU awk ,那么您将遇到问题。

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

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

awk 就是这种情况。/usr/bin/awk在 Solaris 上基于 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/shksh

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

 command -p awk
Run Code Online (Sandbox Code Playgroud)

一定要调用便携式awk 而不是旧的。