如何根据字符串的个数进行排序呢
文件A有2列数据,如何根据第一列每个fam出现的次数排序得到文件Bfam 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
本帖最后由 wh7211 于 2018-05-17 21:11 编辑
回复 1# wd_my
<<<awk4.0+
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}}' A
<<<awk3.0+
awk 'NR==1;NR>1{a[$1]=++a[$1]" "$1;c]=b[$1]?b[$1]"\n"$0:$0;b[$1]=c]}END{e=asort(a,d);for(i=e;i>0;i--){print c]}}' A 本帖最后由 christmas1102 于 2018-05-18 13:04 编辑
回复 2# wh7211
改了下数字 又不行了
# 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
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}}' 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
本帖最后由 wh7211 于 2018-05-18 14:24 编辑
回复 3# christmas1102
文件A有2列数据,如何根据第一列每个fam出现的次数排序得到文件B
楼主的需求是“按出现的次数排序”,没说fam相同的行再按第2个域倒序
本帖最后由 christmas1102 于 2018-05-18 14:00 编辑
回复 4# wh7211
"@val_num_desc";for(i in b) 是只对 b 的value做降序排列。
那是我理解错了,LZ的意思大致是 按照$1 出现的次数降序排列,我以为是在这个基础上,$2的数据也进行降序排列,类似与:
c3
c2
c1
a2
a1
b5
那请问,如果在刚才 $1排列的基础上,$2 也要进行数值的降序排列,这该怎么写法?
回复 5# christmas1102
<<<awk4.0+
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){print i,b}}}' file 回复 6# wh7211
厉害!每次看你写的awk代码,都是看得懂,写不出..学习了。
本帖最后由 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,"r+")
for line in f1.readlines():
a01 = line.split()
if re.match(r'[^\d+]+',a01):
title1 = a01
title2 = a01
continue
l1.append(tuple(a01))
f1.close()
## memo
a04 = sorted(l1,key=lambda x:float(x),reverse=True)
for i1 in a04:
l2.append(i1)
for i2 in set(l2):
d1 = l2.count(i2)
## memo
a05 = sorted(d1.items(),key=lambda x:int(x),reverse=True)
## memo
print("%s%8s" % (title1,title2))
for ii2 in a05:
for ii3 in a04:
if re.match(ii2,ii3):
for x,y in zip(ii3,ii3):
print("%s%8s" % (x,y))
command line>> python2或3 py01.py FILENAME
页:
[1]