Это сработало в моей эмуляции git bash. Дайте мне знать, если он захлебнется полным набором данных.
awk -v keyfile=a.txt ' { sum[$2] += $4; next; }
END {
while ( getline < keyfile && "$0" ) {
match( $0, "^Curr Time:(.*).Num", key);
printf "Curr Time:%d.NumToggles - %d\n", key[1], sum[key[1]];
}
}
' file_*
Логика: сделать один проход через все файлы данных, чтобы суммировать значения для каждого ключа. Затем один проход через главный файл, чтобы получить полный набор ключей, печатая сумму для каждого. Это вызывает только один первичный процесс для одного чтения каждого файла, а не два для начальной загрузки, а затем два для полного сканирования всех файлов данных для каждого ключа, что составляет сотни тысяч проходов через файлы.
Вопросы приветствуются.