我有一个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
有什么好的方法来解决这个问题吗?
谢谢
最好的祝福,比尔吉特
答案 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