所有列值的总和给出一个文件如:UNIX - 重复计数,计数和文件
sid|storeNo|latitude|longitude
2|1|-28.03720000
9|2
10
jgn352|1|-28.03720000
9|2|fdjkjhn422-405
|gfdjk39
预期输出:
sid|storeNo|latitude|longitude
543240|6|-56.0744|0|
6|5|3|0|
5|3|2|0|
我想返回值的计数在每列下,每列下不同值的计数,然后是每列下所有值的总和。但是,我的逻辑/语法肯定是错的,任何帮助纠正它都会很棒!
代码到目前为止(在momemnt它返回无输出):使用gawk
awk 'BEGIN{FS="|"}
NR==1{
for(n = 1; n <= NF; n++) {
colname[n]=$n
}
}
NR>1 { #skips header
for(j=1;j<=NF;j++)
{
sum[j]+=$j
rawcount[j]++
#distinctcount[j, arr[j]]=1
}
}
END{
for(k=1;k<=NF;k++)
{
#for(i in distinctcount)
# distinctcount[k, i]++
print colname[j]"|"
print sum[j]"|"
print rawcount[j]"|"
print distinctcount[j]"|"
}
}' delimd2iffpipe.dat
你用各种脚本所做的所有事情最好用数据库完成(例如sqlite,很容易编写脚本)。 “总和”与您的样本没有很好的定义 - 您如何处理不是数字的条目?是否存在不存在的细胞?如果是这样,他们所有不同或将3个空细胞计为1在你的不同计数,或0? – Mat 2011-12-26 10:41:33
@Mat -Sum将只添加数值,如果一个值中有任何非数字字符,那么它将不会被包含在总和中。不存在的细胞不计算在内。即在不同的计数中为0,因为它没有值。 – toop 2011-12-26 10:46:37
你为什么试图用文本文件和bash脚本来做到这一点?这绝对是使用DB后端(Mat推荐的sqlite或MySQL)和使用Python或Perl等编程语言来处理更好的方法。 – Drahkar 2011-12-26 10:49:18