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/awk
Solaris 上的 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/sh
or ksh
。
在标准 sh 中(即不是 /bin/sh
在 Solaris 上),您还可以使用
command -p awk
请务必致电便携的awk 而不是旧的。