忘记密码   免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 1485 | 回复: 7

[文本处理] 如何根据字符串的个数进行排序呢 [复制链接]

论坛徽章:
0
发表于 2018-05-17 19:40 |显示全部楼层
文件A有2列数据,如何根据第一列每个fam出现的次数排序得到文件B
fam       time
1731    3.94
1731    2.51
tork      4.60
tork      3.45
tork      1.98
sire       2.00
athila     3.27
athila     2.58
文件B
fam       time
tork      4.60
tork      3.45
tork      1.98
athila     3.27
athila     2.58
1731    3.94
1731    2.51
sire       2.00

论坛徽章:
9
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之同曦
日期:2017-09-11 14:39:482016科比退役纪念章
日期:2018-01-19 12:45:59CU十四周年纪念徽章
日期:2018-03-16 13:09:5315-16赛季CBA联赛之北京
日期:2018-03-23 15:24:0715-16赛季CBA联赛之辽宁
日期:2018-04-02 14:03:3915-16赛季CBA联赛之深圳
日期:2018-05-04 21:53:0815-16赛季CBA联赛之广东
日期:2018-05-14 09:52:42CU十四周年纪念徽章
日期:2018-05-15 11:36:38
发表于 2018-05-17 20:22 |显示全部楼层
本帖最后由 wh7211 于 2018-05-17 21:11 编辑

回复 1# wd_my


<<<awk4.0+
  1. awk 'NR==1;NR>1{a[$1]=a[$1]?a[$1]"\n"$0:$0;b[$1]++}END{PROCINFO["sorted_in"]="@val_num_desc";for(i in b){print a[i]}}' A
复制代码

<<<awk3.0+
  1. awk 'NR==1;NR>1{a[$1]=++a[$1]" "$1;c[a[$1]]=b[$1]?b[$1]"\n"$0:$0;b[$1]=c[a[$1]]}END{e=asort(a,d);for(i=e;i>0;i--){print c[d[i]]}}' A
复制代码

论坛徽章:
0
发表于 2018-05-18 12:59 |显示全部楼层
本帖最后由 christmas1102 于 2018-05-18 13:04 编辑

回复 2# wh7211

改了下数字 又不行了

[root@tt ~]# cat file
name          mem(%)
aa          2.2
aa          2.5
bb          4.6
bb          3.4
bb          3.1
bb          9.9
cc          2.9
dd          7.2
dd          8.5
dd          7.5


  1. awk2 'NR==1;NR>1{a[$1]=a[$1]?a[$1]"\n"$0:$0;b[$1]++}END{PROCINFO["sorted_in"]="@val_num_desc";for(i in b){print a[i]}}' file
复制代码
输出结果:
name          mem(%)
bb          4.6
bb          3.4
bb          3.1
bb          9.9
dd          7.2
dd          8.5
dd          7.5
aa          2.2
aa          2.5
cc          2.9


论坛徽章:
9
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之同曦
日期:2017-09-11 14:39:482016科比退役纪念章
日期:2018-01-19 12:45:59CU十四周年纪念徽章
日期:2018-03-16 13:09:5315-16赛季CBA联赛之北京
日期:2018-03-23 15:24:0715-16赛季CBA联赛之辽宁
日期:2018-04-02 14:03:3915-16赛季CBA联赛之深圳
日期:2018-05-04 21:53:0815-16赛季CBA联赛之广东
日期:2018-05-14 09:52:42CU十四周年纪念徽章
日期:2018-05-15 11:36:38
发表于 2018-05-18 13:49 |显示全部楼层
本帖最后由 wh7211 于 2018-05-18 14:24 编辑

回复 3# christmas1102


文件A有2列数据,如何根据第一列每个fam出现的次数排序得到文件B

楼主的需求是“按出现的次数排序”,没说fam相同的行再按第2个域倒序

论坛徽章:
0
发表于 2018-05-18 13:56 |显示全部楼层
本帖最后由 christmas1102 于 2018-05-18 14:00 编辑

回复 4# wh7211

"@val_num_desc";for(i in b) 是只对 b 的value做降序排列。
那是我理解错了,LZ的意思大致是 按照$1 出现的次数  降序排列,我以为是在这个基础上,$2的数据也进行降序排列,类似与:
c  3
c  2
c  1
a  2
a  1
b  5



那请问,如果在刚才 $1排列的基础上,$2 也要进行数值的降序排列,这该怎么写法?

论坛徽章:
9
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之同曦
日期:2017-09-11 14:39:482016科比退役纪念章
日期:2018-01-19 12:45:59CU十四周年纪念徽章
日期:2018-03-16 13:09:5315-16赛季CBA联赛之北京
日期:2018-03-23 15:24:0715-16赛季CBA联赛之辽宁
日期:2018-04-02 14:03:3915-16赛季CBA联赛之深圳
日期:2018-05-04 21:53:0815-16赛季CBA联赛之广东
日期:2018-05-14 09:52:42CU十四周年纪念徽章
日期:2018-05-15 11:36:38
发表于 2018-05-18 15:23 |显示全部楼层
回复 5# christmas1102


<<<awk4.0+
  1. awk 'NR==1;NR>1{a[$1]++;b[$1][$2]=$2}END{PROCINFO["sorted_in"]="@val_num_desc";for(i in a){for(j in b[i]){print i,b[i][j]}}}' file
复制代码

论坛徽章:
0
发表于 2018-05-18 15:37 |显示全部楼层
回复 6# wh7211

厉害!每次看你写的awk代码,都是看得懂,写不出..学习了。

论坛徽章:
0
发表于 2018-05-19 19:05 |显示全部楼层
本帖最后由 christmas1102 于 2018-05-19 21:26 编辑

回复 1# wd_my

#!/usr/local/python
#-*- coding: utf-8 -*-
import re
import sys

l2 = []
l1 = []
d1 = {}

title1 = title2 = ''
f1 = open(sys.argv[1],"r+")
for line in f1.readlines():
    a01 = line.split()
    if re.match(r'[^\d+]+',a01[1]):
        title1 = a01[0]
        title2 = a01[1]
        continue
    l1.append(tuple(a01))
f1.close()
## memo
a04 = sorted(l1,key=lambda x:float(x[1]),reverse=True)
for i1 in a04:
    l2.append(i1[0])
for i2 in set(l2):
    d1[i2] = l2.count(i2)

## memo
a05 = sorted(d1.items(),key=lambda x:int(x[1]),reverse=True)

## memo
print("%s%8s" % (title1,title2))
for ii2 in a05:
    for ii3 in a04:
        if re.match(ii2[0],ii3[0]):
            for x,y in zip(ii3[0::2],ii3[1::2]):
                print("%s%8s" % (x,y))


command line>> python2或3 py01.py FILENAME
您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:wangnan@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP