我想计算 .CSV 文件中的行数,并将最后一个数字列相加。我需要为crontab
制作此内容,因此,它必须是一个脚本。
此代码计算行数:
egrep -i String file_name_201611* | \
egrep -i "cdr,20161115" | \
awk -F"," '{print $4}' | sort | uniq | wc -l
此代码汇总了最后一列:
egrep -i String file_name_201611* | \
egrep -i ".cdr,20161115"| \
awk -F"," '{print $8}' | paste -s -d"+" | bc
行看起来像:
COMGPRS,CGSCO05,COMGPRS_CGSCO05_400594.dat,processed_cdr_20161117100941_00627727.cdr,20161117095940,20161117,18,46521
预期产出:
CGSCO05,sum_#_lines, Sum_$8
CGSCO05, 225, 1500
答案 0 :(得分:0)
这应该有用......
#!/usr/bin/awk -f
BEGIN{
k=0;
FS=","
}
{
if ($2 in counter){
counter[$2] = counter[$2] + 1;
sum_8[$2] = sum_8[$2] + $8;
}else{
k = k + 1;
counter[$2] = 1;
sum_8[$2] = $8;
name[k] = $2;
}
}
END{
for (i=1; i<=k; i++)
printf "%s, %i, %i\n", name[k], counter[name[k]], sum_8[name[k]];
}
答案 1 :(得分:0)
sort
CSV 文件,仅保留包含唯一条目的行,然后打印唯一行的数量,以及列#8中的sum
那些独特的路线:
sort -t, -k2 -u foo.csv | datamash -t, count 2 sum 8