file 1:header1 header2 header3 header40 1 0 1 0 1 0 11 0 0 10 1 0 1file 2:header1 header2 header3 header40 1 0 0 0 0 0 00 0 0 1
计数为0/1的所需输出
header1 header2 header3 header4 Totalfile1 1 3 0 4 4file2 0 1 0 1 3
现在我有一个值等于仅为file1的值的计数,但是每个行都作为标题出现,而我希望原始标题保留为标题,如果没有标题,则不会打印0 …它不包含原始文件名,因此总体上不对!你能指导我做正确的方法吗?
awk 'NF>0{ for (i=1; i<=NF; i++) if(NR==1)h[i]=$i;else if($i==1) a[i]++; } END{for(i=1; i<=length(a); i++) print h[i],a[i],NR}' file1解决方法 以下似乎对我有用:
awk ' # Gather headers,only from the first line of the first file. NR==1{ for(i=1;i<=NF;i++){ h[i]=$i; } } # Do not process header as if they were data. FNR==1{ next; } NF>limit{ limit=NF; } # Step through data { f[filename]++; for(i=1;i<=NF;i++){ a[filename,i]+=$i; } } # display what we found. END{ # headers... printf("file\t"); for(i=1;i<=length(h);i++){ printf("%s\t",h[i]) } print "Total"; # And data. for(file in f){ printf("%s",file); for(i=1;i<=limit;i++){ printf("\t%d",a[file,i]) } printf("\t%d\n",f[file]); } }' file1 file2
请注意,我们为文件名保留了一个数组f [],因为awk并不真正支持多维数组.上面的脚本应该适用于任何旧的awk. (我在FreeBSD中对它进行了测试.)虽然如果处理数百万个文件可能会遇到问题,因为数组使用非零内存量.另一方面,文件数也受shell命令行长度的限制. 总结
以上是内存溢出为你收集整理的linux – 打印许多文件中每列的唯一值计数全部内容,希望文章能够帮你解决linux – 打印许多文件中每列的唯一值计数所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)