使用 shell 脚本计算列中的唯一值
我有一个包含 5 列的制表符分隔文件,需要检索第 2 列中唯一行数的计数。我通常会使用 Perl/Python 执行此操作,但我被迫使用 shell。
我过去曾成功使用 *nix uniq 函数通过管道传输到 wc,但看起来我必须在这里使用 awk。
任何建议将不胜感激。 (我之前问过一个关于使用 awk 进行列检查的类似问题,但这有点不同,我想将它分开,所以如果将来有人有这个问题,这将在这里)
非常感谢!
礼来公司
I have a tab delimited file with 5 columns and need to retrieve a count of just the number of unique lines from column 2. I would normally do this with Perl/Python but I am forced to use the shell for this one.
I have successfully in the past used *nix uniq function piped to wc but it looks like I am going to have to use awk in here.
Any advice would be greatly appreciated. (I have asked a similar question previously about column checks using awk but this is a little different and I wanted to separate it so if someone in the future has this question this will be here)
Many many thanks!
Lilly
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
无需使用 awk。
应该这样做。
这利用了 tab 是 cut 的默认字段分隔符这一事实,因此我们将通过这种方式仅获取第二列的内容。然后,通过
sort
作为uniq
的前置阶段,删除重复项。最后我们计算行数,这就是所寻求的数字。No need to use awk.
should do it.
This uses the fact that tab is
cut
's default field separator, so we'll get just the content from column two this way. Then a pass throughsort
works as a pre-stage touniq
, which removes the duplicates. Finally we count the lines, which is the sought number.我选择
至少在某些版本中,uniq 依赖于正在排序的输入数据(它只查看相邻行)。
例如,在 Solaris 文档 :
I go for
At least in some versions,
uniq
relies on the input data being sorted (it looks only at adjacent lines).For example in the Solaris docs: