我有一个这样的文件:
"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......我想知道如何编写脚本来获得结果。
发布于 2019-12-29 20:47:52
使用一些适合数据处理的语言,比如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
发布于 2019-12-29 23:05:41
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
https://stackoverflow.com/questions/59519276
复制相似问题