【问题标题】:On Solaris, what is the difference between cut and gcut?在 Solaris 上,cut 和 gcut 有什么区别?
【发布时间】:2010-02-04 15:15:26
【问题描述】:

我最近在我的一台 Solaris 机器上遇到了这个疯狂的脚本错误。我发现 Solaris 上的 cut 会跳过它处理的文件中的行(或者至少是非常大的文件 - 在我的情况下为 800 MB)。

> cut -f 1 test.tsv | wc -l
  457030
> gcut -f 1 test.tsv | wc -l
  840571
> cut -f 1 test.tsv > temp_cut_1.txt
> gcut -f 1 test.tsv > temp_gcut_1.txt
> diff temp_cut_1.txt temp_gcut_1.txt | grep '[<]' | wc -l
       0

我的问题是 Solaris cut 到底是怎么回事?我的解决方案是更新我的脚本以使用 gcut 但是......这到底是什么?

【问题讨论】:

    标签: shell solaris


    【解决方案1】:

    我从未听说过 Solaris 中的 gcut。做一个 man gcut 或 gcut --help 看看它是什么。为了安全起见,请使用 cut。否则,您可以使用 nawk。例如(对于您正在尝试做的事情)

    nawk '{print $1}END{print "Total count:"NR}'
    

    由于获取字段 1 和做 wc 与计算行数相同,所以只需做 wc -l &lt; file

    【讨论】:

      【解决方案2】:

      gcut 几乎可以肯定是GNU cut,而另一个可能是源自最初的 System V 剪辑。后者中的代码实际上可能会回到原始的 AT&T Unix 源代码。

      GNU 实用程序在成为现代操作系统(如 Linux 和 OS X)的基础部分之一之前就已经流行起来了。早在 80 年代,许多系统管理员会将它们安装在默认系统之上,或者将它们位于系统目录之前的 PATH 目录中。许多系统管理员喜欢它们的原因之一是它们通常比“本机”实用程序具有更少的任意限制。显然你的 Solaris 机器上的 cut 程序仍然有一些蹩脚的限制。

      我会在运行不同操作系统的不同机器上对此进行测试,以确保您没有发生其他事情,比如一些奇怪的 Unicode 交易。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-04-26
        • 1970-01-01
        • 2010-10-02
        • 2011-12-12
        • 2010-09-16
        • 2012-03-14
        • 2012-02-06
        相关资源
        最近更新 更多