gpt4 book ai didi

performance - 更快地查找受时间限制的重复项

转载 作者:行者123 更新时间:2023-12-04 03:11:26 24 4
gpt4 key购买 nike

在没有 PERL 的带有 AIX 的机器上,如果它们具有相同的 id 并且如果它们在四个小时内注册,我需要过滤将被视为重复的记录。

我使用 AWK 实现了这个过滤器并且工作得很好,但我需要一个更快的解决方案:

# Generar lista de Duplicadosawk 'BEGIN {FS="," }/OK/ {     old[$8] = f[$8];    f[$8] = mktime($4, $3, $2, $5, $6, $7);     x[$8]++;}/OK/ && x[$8]>1 && f[$8]-old[$8] 

Any suggestions? Are there ways to improve the environment (preloading the file or someting like that)?

The input file is already sorted.

With the corrections suggested by jj33 I made a new version with better treatment of dates, still maintaining a low profile for incorporating more operations:

awk 'BEGIN { FS=","; SECSPERMINUTE=60; SECSPERHOUR=3600; SECSPERDAY=86400; split("0 31 59 90 120 151 181 212 243 273 304 334", DAYSTOMONTH, " "); split("0 366 731 1096 1461 1827 2192 2557 2922 3288 3653 4018 4383 4749 5114 5479 5844 6210 6575 6940 7305", DAYSTOYEAR, " ");}/OK/ { old[$8] = f[$8]; f[$8] = mktime($4, $3, $2, $5, $6, $7); x[$8]++;}/OK/ && x[$8]>1 && f[$8]-old[$8] 2 ) && ( ((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0) ) ) { d2m = d2m + 1; } d2y = DAYSTOYEAR[ y - 1999 ]; return ss + (mm*SECSPERMINUTE) + (hh*SECSPEROUR) + (d*SECSPERDAY) + (d2m*SECSPERDAY) + (d2y*SECSPERDAY);}'

最佳答案

这听起来像是一个实际数据库的工作。甚至像 SQLite 这样的东西也可能在这里为您提供相当好的帮助。我看到的最大问题是您对“4 小时内”的定义。这是一个滑动窗口问题,这意味着您不能简单地将所有数据量化为 4 小时段……您必须分别计算每个其他元素的所有“附近”元素。呃。

关于performance - 更快地查找受时间限制的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6475/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com