在 Solaris 上,cut 和 gcut 之间有什么区别?

发布于 2024-08-20 10:24:44 字数 437 浏览 9 评论 0原文

我最近在我的一台 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 削减到底是怎么回事?我的解决方案是更新我的脚本以使用 gcut 但是...到底是什么?

I recently came across this crazy script bug on one of my Solaris machines. I found that cut on Solaris skips lines from the files that it processes (or at least very large ones - 800 MB in my case).

> 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

My question is what the hell is going on with Solaris cut? My solution is updating my scripts to use gcut but... what the hell?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

尘曦 2024-08-27 10:24:44

我从未听说过 Solaris 中的 gcut。执行 man gcut 或 gcut --help 看看它是什么。为了安全起见,请使用 cut。否则,你可以只使用 nawk。例如(对于您想要做的事情),

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

因为获取字段 1 并执行 wc 与计算行数相同,所以只需执行 wc -l <​​code>wc -l <​​code>wc -l <​​code>wc -l <​​code>wc -l <​​code>wc -l <​​code>wc -l <​​code>wc -l <​​code>文件

I have never heard of gcut in Solaris. do a man gcut or gcut --help to see what it is. to play it safe, use cut. Otherwise, you can just use nawk. eg (for what you are trying to do)

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

since getting field 1 and doing wc is the same as counting the lines, just do wc -l < file

不甘平庸 2024-08-27 10:24:44

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

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

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

gcut is almost certainly GNU cut, and the other is probably derived from the original System V cut. Code in the latter might actually go back to original AT&T Unix sources.

The GNU utilities caught on way before they became one of the foundational parts of modern operating systems like Linux and OS X. Way back in the 80s, a lot of sysadmins would install them over the top of the default ones, or put them in a directory in the PATH ahead of the system ones. One of the reasons many sysadmins preferred them is that they often had fewer arbitrary limitations than the "native" utilities. Apparently the cut program on your Solaris box still has some lame limits in it.

I'd test this on a different box running a different OS, to make sure you don't have something else going on, like some weird Unicode deal.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文