首页 > 解决方案 > AWK 在遍历数组时返回重复记录

问题描述

我正在使用 awk 将 15 M 记录(文件 XXX)中的数据聚合到数组中。结束 awk 时,我打印每条聚合记录(aprox,2,25 M),但是,它有时会返回 1 条重复记录。代码(简化)是这样的:

awk '{
  id=substr($0,18,25)
  date=substr($0,131,14)
  field_#=substr($0,##,###)               --> Many fields
  key=id "," date
  array_#[key]=array_#[key] + field_#     --> 4 arrays, some using 3 fields
}END{
  for key in array_1{
    print(array_1[key] "," array_2[key] "," array_3[key] "," array_4[key])
  }
}' XXX

代码中有什么东西会导致重复记录吗?与此相关,当这种情况发生时,它会引发“无法分叉”内存错误消息,因为它正在使用具有机器的 16GB 内存中的 12GB。是否有任何原因可以导致该错误?

我已经检查过文件中没有任何特殊字符,因为它们可能导致“假”重复键。

###### 数据
INPUT
#...### IDENTIFIER   ####...### VOL_UP    VOL_DOWN  VOL_TOTAL ###...#### YYYYMMDDHHMISS #####
#...### 9876123      ####...### 123456    665204500 665327956 ###...#### 20180529020103 #####
#...### 7854954      ####...### 654       456121    456775    ###...#### 20180529102501 #####
#...### 9876123      ####...### 105251    58044518  58149769  ###...#### 20180529020103 #####

OUTPUT
#...### 9876123      ####...### 228707    723249018 723477725 ###...#### 20180529020103 #####
#...### 7854954      ####...### 654       456121    456775    ###...#### 20180529102501 #####

标签: awk

解决方案


推荐阅读