如何计算制表符分隔的文本文件中字段的唯一值的数量?

sfa*_*tor 35 linux bash command-line

我有一个文本文件,其中包含大量数据,并以制表符分隔.我想查看数据,以便我可以在列中看到唯一值.例如,

Red     Ball 1 Sold
Blue    Bat  5 OnSale
............... 
Run Code Online (Sandbox Code Playgroud)

所以,它就像第一列有颜色一样,所以我想知道该列中有多少不同的唯一值,我希望能够为每一列做到这一点.

我需要在Linux命令行中执行此操作,因此可能使用一些bash脚本,sed,awk或其他东西.

附录:感谢大家的帮助,我可以再问一件事吗?如果我想要计算这些独特的价值怎么办?

我想我没有清楚地说明第二部分.我想要做的是计算这些唯一值的"每个",不知道有多少独特的值.例如,在第一列中我想知道有多少红色,蓝色,绿色等彩色物体.

cod*_*ict 74

您可以使用的cut,sortuniq命令如下:

cat input_file | cut -f 1 | sort | uniq
Run Code Online (Sandbox Code Playgroud)

在字段1中获取唯一值,将1替换为2将在字段2中为您提供唯一值.

避免UUOC :)

cut -f 1 input_file | sort | uniq
Run Code Online (Sandbox Code Playgroud)

编辑:

要计算唯一出现次数,您可以使用wc链中的命令:

cut -f 1 input_file | sort | uniq | wc -l
Run Code Online (Sandbox Code Playgroud)

  • `uniq -c`将给出每个项目的计数 - `wc -l`将计算项目的总数. (20认同)
  • 你也可以用`sort -u`代替`sort | uniq` (5认同)

Jon*_*man 8

您可以使用awk,sort和uniq来执行此操作,例如列出第一列中的所有唯一值

awk < test.txt '{print $1}' | sort | uniq
Run Code Online (Sandbox Code Playgroud)

如在其他地方发布的那样,如果要计算某些内容的实例数,可以将唯一列表输入到 wc -l


小智 8

cat test.csv | awk '{ a[$1]++ } END { for (n in a) print n, a[n] } '
Run Code Online (Sandbox Code Playgroud)