awk、ruby计算总分排名,相同总分显示同一名次

文件a.txt

考号	姓名	语文	数学	英语
70668	赵永刚	116	131	122
70646	张智文	109	116	125
70639	狄建译	109	68	126
70601	沙龙逸	123	148	136
70669	丁婉艺	95	71	85
70635	何旭	114	113	120
70653	王晟煜	79	49	64
70615	贺俊文	103	127	110
70633	范作鑫	121	127	131
70650	王春月	118	82	112
70667	张曦月	116	123	119
70606	李鉴学	126	135	140
70651	王治超	105	95	82
70605	杨璐	131	143	144
70638	代诗涵	105	105	126
70608	徐冲	122	124	139
70607	刘钰婷	115	139	135
70611	林世博	116	142	129
70620	裴子翔	111	139	128
70618	张智凯	110	117	119
70654	于娇莹	97	76	71
70657	吕文卓	82	53	62
70609	韩林霖	127	139	142
70640	臧云飞	101	59	108
70656	袁茂哲	85	95	85
70661	刘旭辉	99	87	44
70632	代明哲	101	91	115
70631	黄俊焯	101	112	106
70652	黄明涛	87	77	43
70614	刘姗	124	128	122
70649	李季	114	117	118
70643	张晓爽	113	113	119
70659	张宇婷	83	61	71
70619	任雪桐	124	108	144
70629	赵殿宇	112	109	130
70602	刘帅	116	143	140
70665	尹鸿涛	66	23	34
70610	张瑞鑫	126	115	139
70627	张俊奎	103	103	111
70637	姜美慧	117	121	106
70647	张家硕	107	67	129
70655	郭娜	94	98	104
70630	张开羽	112	90	104
70642	邹建志	98	104	116
70648	张良	105	102	105
70663	满朝升	78	45	47
70617	张埕镒	112	105	126
70616	康惠雯	114	142	139
70634	张馨月小	108	110	119
70641	孙波	96	130	89
70636	张馨月大	114	124	122
70645	杨加晖	110	102	136
70644	周坤	107	76	104
70603	王雪	131	135	144
70621	张希	123	130	134
70662	赵森	90	29	64
70613	王柏坤	121	123	128
70628	洪禹	106	100	80
70604	韩雨萌	129	133	138
70658	李忠浩	86	32	46
70625	武传禹	119	129	130
70624	胡丁文	116	122	118
70660	孙龙基	99	21	67
70623	卢一凡	121	123	139
70626	赵美欣	118	126	111
70622	艾宇	115	111	106
70612	苑宇飞	118	136	131
70664	侯禹志	75	23	34

awk代码:

head -n1 a.txt |awk '{print $0,"总分","排名"}' && tail -n +2 a.txt|awk '{print $0,$3+$4+$5}'|sort -k 6 -nr|awk '{n++; if(p==$6){print $0,v}else{print $0,n}; p=$6;v=n}'

输出结果:

考号	姓名	语文	数学	英语	总分	排名
70605	杨璐	131	143	144	418	1
70603	王雪	131	135	144	410	2
70609	韩林霖	127	139	142	408	3
70601	沙龙逸	123	148	136	407	4
70606	李鉴学	126	135	140	401	5
70604	韩雨萌	129	133	138	400	6
70602	刘帅	116	143	140	399	7
70616	康惠雯	114	142	139	395	8
70607	刘钰婷	115	139	135	389	9
70621	张希	123	130	134	387	10
70611	林世博	116	142	129	387	10
70608	徐冲	122	124	139	385	12
70612	苑宇飞	118	136	131	385	12
70623	卢一凡	121	123	139	383	14
70610	张瑞鑫	126	115	139	380	15
70633	范作鑫	121	127	131	379	16
70620	裴子翔	111	139	128	378	17
70625	武传禹	119	129	130	378	17
70619	任雪桐	124	108	144	376	19
70614	刘姗	124	128	122	374	20
70613	王柏坤	121	123	128	372	21
70668	赵永刚	116	131	122	369	22
70636	张馨月大	114	124	122	360	23
70667	张曦月	116	123	119	358	24
70624	胡丁文	116	122	118	356	25
70626	赵美欣	118	126	111	355	26
70629	赵殿宇	112	109	130	351	27
70646	张智文	109	116	125	350	28
70649	李季	114	117	118	349	29
70645	杨加晖	110	102	136	348	30
70635	何旭	114	113	120	347	31
70618	张智凯	110	117	119	346	32
70643	张晓爽	113	113	119	345	33
70637	姜美慧	117	121	106	344	34
70617	张埕镒	112	105	126	343	35
70615	贺俊文	103	127	110	340	36
70634	张馨月小	108	110	119	337	37
70638	代诗涵	105	105	126	336	38
70622	艾宇	115	111	106	332	39
70631	黄俊焯	101	112	106	319	40
70642	邹建志	98	104	116	318	41
70627	张俊奎	103	103	111	317	42
70641	孙波	96	130	89	315	43
70650	王春月	118	82	112	312	44
70648	张良	105	102	105	312	44
70632	代明哲	101	91	115	307	46
70630	张开羽	112	90	104	306	47
70647	张家硕	107	67	129	303	48
70639	狄建译	109	68	126	303	48
70655	郭娜	94	98	104	296	50
70644	周坤	107	76	104	287	51
70628	洪禹	106	100	80	286	52
70651	王治超	105	95	82	282	53
70640	臧云飞	101	59	108	268	54
70656	袁茂哲	85	95	85	265	55
70669	丁婉艺	95	71	85	251	56
70654	于娇莹	97	76	71	244	57
70661	刘旭辉	99	87	44	230	58
70659	张宇婷	83	61	71	215	59
70652	黄明涛	87	77	43	207	60
70657	吕文卓	82	53	62	197	61
70653	王晟煜	79	49	64	192	62
70660	孙龙基	99	21	67	187	63
70662	赵森	90	29	64	183	64
70663	满朝升	78	45	47	170	65
70658	李忠浩	86	32	46	164	66
70664	侯禹志	75	23	34	132	67
70665	尹鸿涛	66	23	34	123	68

Ruby:

#!/usr/bin/env ruby
class Array
    def sum_sort(title = "\tSUM\tNO.", offset=1)
        [self[0] + "#{title}"] + self[1..-1].map do |a| 
            [a, a.split(/[\s\t]+/)[offset..-1].map(&:to_i).sum]
        end.sort do |x,y| 
            y.last <=> x.last 
        end.reduce([]) do |s, a|
            s << (a << (!s.empty? && s.last[-2] == a.last ? s.last.last : 1 + s.size))
        end.map{|a| a * "\t" }
    end
end
File.write(
    "b.txt", 
    File.read("a.txt").split("\n")
    .sum_sort("\t总分\t排名", 2)
    .join("\n")
)

转载于:https://my.oschina.net/jsk/blog/1560799

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值