首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何编写脚本文件来处理这类文件?

如何编写脚本文件来处理这类文件?
EN

Stack Overflow用户
提问于 2019-12-29 20:11:20
回答 2查看 37关注 0票数 0

我有一个这样的文件:

"JE_TUT_M05_W1_009 2 1 1 1 1610 1609 2598 2597 2597 2597 JE_TUT_M05_W1_009 SIL K_B R_I AE1_I SH_E SIL“

而像SIL、K_B、R_I、AE1_I、SH_E这样的每个符号都对应一个[]。现在我要计算each[]中的数字的数量。例如,对于第一个SIL,数字的数量是1-8,对于K_B,数字的数量是9-11,依此类推。总的来说,最终结果有点像一个数组:SIL->1-8,K_B->9-11,R_I->12-13,AE1_I->14-16......我想知道如何编写脚本来获得结果。

EN

回答 2

Stack Overflow用户

发布于 2019-12-29 20:47:52

使用一些适合数据处理的语言,比如GNU awk。

由于今天是我的生日,而你似乎对如何处理这个问题一无所知,这里是一个开始:

代码语言:javascript
运行
复制
$ gawk '
BEGIN {
    FPAT = "([^ ]+)|(\\[[^][]+\\])"
}
{
    gsub(/^"|"$/,"")
    for(i=2;i<=NF/2;i++) {
        gsub(/^\[|\]$/,"",$i)
        print $(i+(NF/2)) "->" c+1 "-" (c+=split($i,tmp,FS))
    }
}' file

输出:

代码语言:javascript
运行
复制
SIL->1-8
K_B->9-11
R_I->12-13
AE1_I->14-16
SH_E->17-22
SIL->23-30
票数 1
EN

Stack Overflow用户

发布于 2019-12-29 23:05:41

代码语言:javascript
运行
复制
def parse_line(input_line):
    my_list = input_line.split(' ')
    my_skip = my_list[0]
    count = 0
    j = -1
    out_dict = {}
    for elem in my_list:
        if elem.isdigit():
            count = count + 1
        if my_skip == elem:
            continue
        if elem == '[':
            start = count + 1
        if elem == ']':
            print( my_list[j] ,"->", f"{start}-{count}" )
            j = j - 1 

input_line = "JE_TUT_M05_W1_009 [ 2 1 1 1 1 1 1 1 ] [ 18774 18773 18773 ] [ 1610 1609 ] [ 14604 14603 14603 ] [ 2598 2597 2597 2597 2597 2597 ] [ 2 1 1 1 1 1 1 1 ] JE_TUT_M05_W1_009 SIL K_B R_I AE1_I SH_E SIL"
parse_line(input_line)

上面是python的解决方案。我假设,JE_TUT_M05_W1_009,即第一个字符串在您的输入行中出现两次。

输出:

代码语言:javascript
运行
复制
SIL -> 1-8
SH_E -> 9-11
AE1_I -> 12-13
R_I -> 14-16
K_B -> 17-22
SIL -> 23-30
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59519276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档