awk - 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 #####
解决方案
推荐阅读
- c# - 如何设置列的值等于(column1 * column2)
- java - PrinterWriter 创建一个文件但不写入它。到处都试过冲洗和关闭。仍然不写入文件
- mysql - DSN 无效:网络地址未终止(缺少右括号)
- javascript - 从提交角度6获取HTML选择值和输入值
- php - 将多个文件从客户端系统复制到服务器
- c++ - 这是使用构造函数初始化数组对象的最佳方法吗?
- java - MYSQL 单查询获取 COUNT(DISTINCT columnName) 与 group by 和 order by
- php - 将函数和类名称存储在一个数组中并从同一个类中调用它
- jquery - 使用默认文件触发输入类型文件的方法
- css - 相对于图像定位元素