我有一个像这样的文件:
“ 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“
每个符号,例如SIL,K_B,R_I,AE1_I,SH_E都对应一个[]。现在,我想计算每个[]中的数字。例如,对于第一个SIL,数字的数量是1-8,对于K_B,数字的数量是9-11,依此类推。总的来说,最终结果有点像一个数组:SIL-> 1-8,K_B-> 9-11,R_I-> 12-13,AE1_I-> 14-16 ....... 我想知道如何编写脚本来获得结果。
答案 0 :(得分:1)
使用一些适合数据处理的语言,例如GNU awk。
因为今天是我的生日,看来您不知道如何解决这个问题,所以这里是一个开始:
$ 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
输出:
SIL->1-8
K_B->9-11
R_I->12-13
AE1_I->14-16
SH_E->17-22
SIL->23-30
答案 1 :(得分:0)
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即第一个字符串在您的输入行中出现了两次。
输出:
SIL -> 1-8
SH_E -> 9-11
AE1_I -> 12-13
R_I -> 14-16
K_B -> 17-22
SIL -> 23-30