如何计算每行列数不均匀的csv文件中唯一字段的数量
How to count number of unique fields in a csv file with uneven number of columns in each row
我有一个 csv 文件,其中包含特定目录中文件的变量提取。因此每行的列数不同,如下所示:
filename1,variable1,variable2,variable3,variable4
filename2,variable1,variable2,variable5
filename3,variable1,variable5,variable6,variable7,variable8
(已删除尾随逗号)
命令:
awk -F ',' "{print NF}" < input.csv
不要真的这样做,因为它只显示文件中所有行的 "largest" 行的列数。
如果我能得到每一行的变量数,更重要的是,能得到整个文件中唯一字段的数量,那就太好了。
第一个请求的理想输出类似于:
filename1 4
filename2 3
filename3 5
第二次请求的理想输出(整个文件中唯一字段的数量):
8
关于如何处理这个问题有什么好的想法吗?
谢谢,
祝你好运,Birgitte
您的两个要求可以一次完成:
awk -F, '{for(i=2;i<=NF;i++)a[$i]}{print , 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 , NF-1}' file.csv
和
awk -F, '{for(i=2;i<=NF;i++)a[$i]}END{print length(a)}' file.csv
这可能比单个 awk
脚本慢,但有替代方案总是好的:
整个文件中唯一变量的数量
$ cut -d, -f2- file | tr , \n | sort -u | wc -l
8
每行变量数
$ paste \
<(cut -d, -f1 file) \
<(grep -no , file | uniq -c | tr -s ' ' \t | cut -f2)
filename1 4
filename2 3
filename3 5
我有一个 csv 文件,其中包含特定目录中文件的变量提取。因此每行的列数不同,如下所示:
filename1,variable1,variable2,variable3,variable4
filename2,variable1,variable2,variable5
filename3,variable1,variable5,variable6,variable7,variable8
(已删除尾随逗号)
命令:
awk -F ',' "{print NF}" < input.csv
不要真的这样做,因为它只显示文件中所有行的 "largest" 行的列数。
如果我能得到每一行的变量数,更重要的是,能得到整个文件中唯一字段的数量,那就太好了。
第一个请求的理想输出类似于:
filename1 4
filename2 3
filename3 5
第二次请求的理想输出(整个文件中唯一字段的数量):
8
关于如何处理这个问题有什么好的想法吗?
谢谢,
祝你好运,Birgitte
您的两个要求可以一次完成:
awk -F, '{for(i=2;i<=NF;i++)a[$i]}{print , 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 , NF-1}' file.csv
和
awk -F, '{for(i=2;i<=NF;i++)a[$i]}END{print length(a)}' file.csv
这可能比单个 awk
脚本慢,但有替代方案总是好的:
整个文件中唯一变量的数量
$ cut -d, -f2- file | tr , \n | sort -u | wc -l
8
每行变量数
$ paste \
<(cut -d, -f1 file) \
<(grep -no , file | uniq -c | tr -s ' ' \t | cut -f2)
filename1 4
filename2 3
filename3 5