所有列值的總和給出一個文件如: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