如何计算每行列数不均匀的csv文件中唯一字段的数量

时间:2018-12-14 11:47:47

标签: bash csv unix uniq

我有一个csv文件,其中包含特定目录中文件的变量提取。因此,每行的列数有所不同,如下所示:

filename1,variable1,variable2,variable3,variable4
filename2,variable1,variable2,variable5
filename3,variable1,variable5,variable6,variable7,variable8

(删除了逗号)

命令:

awk -F ',' "{print NF}" < input.csv 

请不要真正使用该技巧,因为它只显示文件中所有行中“最大”行的列数。

如果我能够获得每一行的变量数量,更重要的是,获得整个文件中唯一字段的数量,那将是很棒的。

第一个请求的理想输出如下:

filename1   4
filename2   3
filename3   5

第二个请求的理想输出(整个文件中唯一字段的数量):

8

有什么好的方法来解决这个问题吗?

谢谢

最好的祝福,比尔吉特

2 个答案:

答案 0 :(得分:1)

您可以一次完成两个要求:

awk -F, '{for(i=2;i<=NF;i++)a[$i]}{print $1, NF-1}
         END{print "total unique vars:"length(a)}' file.csv

以您的示例数据作为输入,我们得到:

filename1 4
filename2 3
filename3 5
total unique vars:8

如果要将它们分为两个cmd:

awk -F, '{print $1, NF-1}' file.csv

awk -F, '{for(i=2;i<=NF;i++)a[$i]}END{print length(a)}' file.csv

答案 1 :(得分:1)

这可能比单个OnDataChange脚本要慢,但是拥有替代脚本总是很好:

整个文件中唯一变量的数量

awk

每行变量的数量

$ cut -d, -f2- file | tr , \\n | sort -u | wc -l
8