排线组 [英] sorting group of lines

查看:115
本文介绍了排线组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个如下的文本文件

I have a text file like below

iv_destination_code_10
TAP310_mapping_RATERUSG_iv_destination_code_10
RATERUSG.iv_destination_code_10 = WORK.maf_feature_info[53,6]
iv_destination_code_2
TAP310_mapping_RATERUSG_iv_destination_code_2
RATERUSG.iv_destination_code_2 = WORK.maf_feature_info[1,6]
iv_destination_code_3
TAP310_mapping_RATERUSG_iv_destination_code_3
RATERUSG.iv_destination_code_3 = WORK.maf_feature_info[7,6]
iv_destination_code_4
TAP310_mapping_RATERUSG_iv_destination_code_4
RATERUSG.iv_destination_code_4 = WORK.maf_feature_info[13,6]
iv_destination_code_5
TAP310_mapping_RATERUSG_iv_destination_code_5
RATERUSG.iv_destination_code_5 = WORK.maf_feature_info[19,6]
iv_destination_code_6
TAP310_mapping_RATERUSG_iv_destination_code_6
RATERUSG.iv_destination_code_6 = WORK.maf_feature_info[29,6]
iv_destination_code_7
TAP310_mapping_RATERUSG_iv_destination_code_7
RATERUSG.iv_destination_code_7 = WORK.maf_feature_info[35,6]
iv_destination_code_8
TAP310_mapping_RATERUSG_iv_destination_code_8
RATERUSG.iv_destination_code_8 = WORK.maf_feature_info[41,6]
iv_destination_code_9
TAP310_mapping_RATERUSG_iv_destination_code_9
RATERUSG.iv_destination_code_9 = WORK.maf_feature_info[47,6]

三行组合形成一个单元:

combination of three lines form a unit:

    iv_destination_code_9
    TAP310_mapping_RATERUSG_iv_destination_code_9
    RATERUSG.iv_destination_code_9 = WORK.maf_feature_info[47,6]

是一个单位.

iv_destination_code_9

iv_destination_code_9

9表示我必须排序的数字 10 9 8 ....

9 indicates the number by which i have to sort 10 9 8....

我需要一个shell脚本/awk,它将按降序对单元进行排序. 怎么可能?

i need a shell script/awk which will sort the units in a descending order. how is it possible?

推荐答案

sed 'N;N;s/\n/#/g' file |sort -t"_" -nr -k4 | sed 's|#|\n|g'

或者用gawk

awk -vRS="\niv_" -vFS="\n" 'BEGIN{t=0}
{
 m=split($1,a,"_")
 num[a[m]]
 line[a[m]] = $0
}
END{
 cmd="sort -nr"
 for(i in num){ print i |& cmd }
    close(cmd,"to")
    while((cmd |& getline m) > 0) {
        z=split(m,arr2,"\n")
    }
    close(cmd,"from")
 print line[ arr2[1] ]
 for(j=2;j<=z;j++){
    if(line[ arr2[j]] != "" ){
        print "iv_"line[ arr2[j] ]
    }
 }
}' file

这篇关于排线组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆