打印匹配的模式并保持awk变量到特定列的常量

时间:2019-05-10 06:54:51

标签: linux python-3.x bash perl awk

我有一个类似以下的数据集:

输入(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

0 个答案:

没有答案