我有一个类似以下的数据集:
输入(input.txt):
AAAA 1192 from CCCC 1154 to CCCC 1171 #1st BATCH
AAAA 1196 from CCCC 1153 to CCCC 1170 #1st BATCH
AAAA 1200 from CCCC 1153 to CCCC 1167 #1st BATCH
BBBB number: 250231 DDDD: 5250.00,5231.00 # 1st BATCH
AAAA 1168 from CCCC 1158 to CCCC 1186 #2nd BATCH
AAAA 1172 from CCCC 1158 to CCCC 1177 #2nd BATCH
AAAA 1176 from CCCC 1157 to CCCC 1182 #2nd BATCH
BBBB number: 260204 DDDD: 5260.00,5204.00 #2nd BATCH
而且,我想匹配多列数字的第一行模式,并用它来计算增量范围,以便可以将其用于输出两个新列以显示数据范围。然后,增量范围可用于计算同一批数据的下一行。
从第一批的第一行和最后一行开始,让我们忽略所有字母字符,并仅假设剩下的数字(注释除外):
1192 1154 1171 #1st BATCH
5250.00,5231.00 #1st BATCH
#a #b #c
从上面开始,第一个批处理的第一行应计算c-b = incrementRange(1171-1154 = 17),然后每个incrementRange应该为+1,应为17 + 1 = 18。因此,第一个批次应使用18的增量,而第二个批次应使用29的增量。那么这些增量范围需要从左侧输出到新列的第二列中,而每个批次的第一列应以value开始1,示例如下:
1 18 1192 1154 1171 #1st BATCH
5250.00,5231.00 #1st BATCH
当输出第二行或下一行时,应输出如下内容,第一行值1的前第一列将加18并变为19,而第一行值18的前第二列将被添加加18变成36。对于3、4、5列,它将使用来自各行输入的相同值:
1 18 1192 1154 1171 #1st BATCH
19 36 1192 1153 1170 #1st BATCH
5250.00,5231.00 #1st BATCH
到达批处理的最后一行时,它需要从最后一行获取值,然后将其从左侧输出到两个新列中,例如:
5250.00,5231.00 1 18 1192 1154 1171 #1st BATCH
5250.00,5231.00 19 36 1192 1154 1171 #1st BATCH
将重复此功能循环,直到到达下一批为止 数据的。对于定界符','我可以简单地通过使用tr“,”“”将其删除。对于浮点,我可以简单地使用awk printf用浮点将其打印回来。
我试图解决它,但是没有用。这是下面的示例代码:
BEGIN {
initialValue+=1
}
/ BBBB/ {
split($6,d,",")
scriptNum=$3
next
}
/ AAAA/ {
totalDiff=$8-$5
counter+=totalDiff+initialValue
firstCount=counter-totalDiff
printf "%d\t%d\t%d\t%d\t%0.2f\t%0.2f\t%0.2f\n",d[1],d[2],firstCount,counter,$2,$5,$8
}
结果输出来自我的实际代码:
0 0 1 18 1192.00 1154.00 1171.00
0 0 19 36 1196.00 1153.00 1170.00
0 0 37 51 1200.00 1153.00 1167.00
5250 5231 185 213 1168.00 1158.00 1186.00
5250 5231 214 233 1172.00 1158.00 1177.00
5250 5231 234 259 1176.00 1157.00 1182.00
最终期望输出1:
5250.00 5231.00 1 18 1192.00 1154.00 1171.00 #1st BATCH
5250.00 5231.00 19 36 1196.00 1153.00 1170.00 #1st BATCH
5250.00 5231.00 37 51 1200.00 1153.00 1167.00 #1st BATCH
5260.00 5204.00 1 29 1168.00 1158.00 1186.00 #2nd BATCH
5260.00 5204.00 30 49 1172.00 1158.00 1177.00 #2nd BATCH
5260.00 5204.00 50 75 1176.00 1157.00 1182.00 #2nd BATCH
最终期望输出2:
5250.00,5231.00 1 18 1192 1154 1171 #1st BATCH
5250.00,5231.00 19 36 1196 1153 1170 #1st BATCH
5250.00,5231.00 37 51 1200 1153 1167 #1st BATCH
5260.00,5204.00 1 29 1168 1158 1186 #2nd BATCH
5260.00,5204.00 30 49 1172 1158 1177 #2nd BATCH
5260.00,5204.00 50 75 1176 1157 1182 #2nd BATCH