Одной из возможностей для рассмотрения является разделение задачи на две части - объединение двух файлов на основе этого общего поля, а затем выполнение математических операций.Это избавляет от необходимости хранить часть каждой строки из одного файла в памяти все сразу, что хорошо, если они большие.
В следующем предполагается, что а) файлы отсортированы по первому столбцу, b) что вкладки используются для разделения столбцов:
$ join -j1 -o '1.4 2.4' file1.txt file2.txt | awk '{total+=$2-$1} END {print total}'
0.208557
Команда объединения объединяет два файла в общих строках и выводит только те числа, которые вы хотите вычесть, которые передаются в awk для выполнения фактической математики..
Редактировать: Или все в awk:
$ awk 'NR==FNR { f1[$1]=$4; next }
$1 in f1 { total += $4 - f1[$1] }
END { print total }' file1.txt file2.txt
0.208557
, где хранятся идентификаторы и время из первого файла в ассоциативном массиве, а затем для каждой строки в файле 2, если эта строкаИдентификатор существует в массиве, добавьте разницу времени к итогу.Наконец, напечатайте итог после прочтения всего файла.