-
博文分类专栏
- Jquery基础教程
-
- 文章:(15)篇
- 阅读:46587
- shell命令
-
- 文章:(42)篇
- 阅读:154333
- Git教程
-
- 文章:(36)篇
- 阅读:234973
- leetCode刷题
-
- 文章:(76)篇
- 阅读:132036
-
利用Shell中awk和sort命令合并同类数据后并依据某一列进行排序2017-09-26 21:33 阅读(13475) 评论(0)
待处理的数据格式如下:
为了便于统计分析,对数据进行如下处理:
当姓名相同的时候,将后面的值相加,最后依据后面值的大小进行排序。
思路:先使用awk对数据进行合并,然后使用sort对数据进行排序。
awk '{if($1){a[$1] += $2;}} END{for(i in a){print i":"a[i]}} ' test.txt > packData.txt
这样将test.txt中的内容,依据第一列进行合并,并输出到packData.txt中,接下来就是排序了
cat packData.txt |sort -nrk 2 -t: > order.txt
当然若想一行搞定,也没有问题
awk '{if($1){a[$1] += $2;}} END{for(i in a){print i":"a[i]}} ' test.txt |sort -nk 2 -t:
备注
关于sort命令
选项与参数: -f :忽略大小写的差异,例如 A 与 a 视为编码相同; -b :忽略最前面的空格符部分; -M :以月份的名字来排序,例如 JAN, DEC 等等的排序方法; -n :使用『纯数字』进行排序(默认是以文字型态来排序的); -r :反向排序; -u :就是 uniq ,相同的数据中,仅出现一行代表; -t :分隔符,默认是用 [tab] 键来分隔; -k :以那个区间 (field) 来进行排序的意思
关于awk命令
awk命令格式如下:
awk '{pattern + action}' {filenames}