Bash 如何获取CSV中列中不同值的总数?

Bash 如何获取CSV中列中不同值的总数?,bash,csv,Bash,Csv,我有一个名为test.CSV的CSV文件。看起来是这样的: 1,Color 1,Width 2,Color 2,Height 我想知道第一列中有多少不同的值。在这种情况下,shell脚本应该返回2 我试着运行sort-u-t,-k2,2 test.csv,这是我在另一个问题上看到的,但它输出的信息远远超出了我的需要 如何编写一个shell脚本来打印test.csv的第一列中不同值的数量?使用awk可以执行以下操作: awk -F, '!seen[$1]++{c++} END{print c}'

我有一个名为
test.CSV
的CSV文件。看起来是这样的:

1,Color
1,Width
2,Color
2,Height
我想知道第一列中有多少不同的值。在这种情况下,shell脚本应该返回
2

我试着运行
sort-u-t,-k2,2 test.csv,这是我在另一个问题上看到的,但它输出的信息远远超出了我的需要

如何编写一个shell脚本来打印
test.csv
的第一列中不同值的数量?

使用awk可以执行以下操作:

awk -F, '!seen[$1]++{c++} END{print c}' file

2
此awk命令使用key
$1
,并将它们存储在一个数组中。第一次填充密钥时,其值将递增为1。每次我们得到一个唯一的密钥时,我们都会增加计数
c
,并最终打印出来。

使用awk,您可以执行以下操作:

awk -F, '!seen[$1]++{c++} END{print c}' file

2
此awk命令使用key
$1
,并将它们存储在一个数组中。第一次填充密钥时,其值将递增为1。每次我们得到一个唯一的密钥,我们都会增加count
c
,并最终打印出来。

cut -d, -f1 file | sort -u | wc -l
使用
cut
提取第一列,然后使用
sort
获取唯一值,然后使用
wc
对其进行计数。

cut -d, -f1 file | sort -u | wc -l
#List the first column of the CSV, then sort and filter uniq then take count. 

awk -F, '{print $1}' test.csv  |sort -u  |wc -l
使用
cut
提取第一列,然后使用
sort
获取唯一值,然后使用
wc
对其进行计数

#List the first column of the CSV, then sort and filter uniq then take count. 

awk -F, '{print $1}' test.csv  |sort -u  |wc -l