我有一个大文件(大约200 MB),我需要提取 前10个(和前n%)元组的大多数聚合值 例如,我有一个2列csv文件:
c1 c2
----------
a,10
b,20
c,5
d,60
a,20
c,10
a,20
b,10
我需要前2条记录,最大聚合c2值, 在这种情况下,我需要这个输出:
a,50
d,60
正如我所说的文件太大(500000条长记录) 如果我需要前1%或10%,我不能只是简单地使用 像这样的东西,因为它传递了唯一的a,b,c,d,...的数量
while read line
do
Sum=$(awk -F, -v inp=$line '$1==inp{x+=$2;}END{print x}' $INPUT_File)
done < firstColumnFile
请注意,这里的firstColumnFile
只是一个临时文件,我把a,b,c,d,...放在其中......
我必须处理的主文件是INPUT_File
如何使用bash,awk使用单个传递文件?
答案 0 :(得分:1)
您可以使用以下awk
脚本进行聚合:
$ awk -F, 'NR>2{a[$1]+=$2}END{for(k in a)print k","a[k]}' file
a,50
b,30
c,15
d,60
仅对n
值的排序和尾部进行Tac:
$ awk -F, 'NR>2{a[$1]+=$2}END{for(k in a)print k","a[k]}' file | sort -t, -k2 | tail -n 2
a,50
d,60