AIX を使用しないマシンでPERLは、同じ ID を持ち、4 時間の間に登録された場合に重複していると見なされるレコードをフィルター処理する必要があります。
私はこのフィルターを使用して実装しAWK、かなりうまく機能しますが、もっと速い解決策が必要です:
# Duplicados の一般的なリスト
awk 'BEGIN {
FS=","
}
/わかった/ {
古い[$8] = f[$8];
f[$8] = mktime($4, $3, $2, $5, $6, $7);
x[$8]++;
}
/OK/ && x[$8]>1 && f[$8]-old[$8]
助言がありますか?環境を改善する方法はありますか (ファイルのプリロードなど)。
入力ファイルは既にソートされています。
jj33によって提案された修正により、日付の処理を改善した新しいバージョンを作成しましたが、より多くの操作を組み込むために目立たないように維持しています。
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, " ");
}
/わかった/ {
古い[$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);
}
'