Вы могли также рассмотреть использование подхода join
так как Вы хотите отсортированный вывод в конце. Как:
join -t, -j2 <(sort -t, -k2 file1) <(sort -t, -k2 file2) |
awk -F, '{n=$3-$2; if (n) print n, $1}'
Сортировка
Команда уже оптимизирована для обработки огромных файлов. Таким образом, вы могли бы очень хорошо использовать команду сортировки
в вашем файле, как,
sort -u -t' ' -k3,3 file
-U
- Печать только уникальных строк. -T
- укажите разделитель. Вот в этом примере я просто использую пространство в качестве разделителя. -K3,3
- Сортировать на 3-м поле. Вы можете ссылаться на это Ответ, который говорит о том, что GNU сортирует на самом деле лучше подходить для сортировки больших файлов. В вашем случае я думаю даже без -Parallel
, вы могли бы достичь вашего конечного результата без особой временной задержки.
Просто измените команду awk в столбец, который вы хотите выполнить, чтобы удалить дублированные строки на основе (в вашем случае третьего столбца):
awk '!seen[$3]++' filename
Эта команда говорит awk
, какие строки для печати. Переменная $ 3
содержит все содержимое колонны 3 и квадратные скобки - это доступ к массиву. Итак, для каждого третьего столбца строки в имею имени файла узел массива с именем
увеличивается, и линия напечатана, если содержимое этого узла (столбец3) не было (!
) ранее установленные.
Выше AWK
Команда будет работать, если ваши столбцы в входном файле разделите с пространством
или вкладку
между собой, если столбцы, разграниченные с чем-то еще, вы Необходимо сказать это на awk с вариантом -F
. Таким образом, например, если все столбцы разграничиваются с запятой (,
) и хотят удалить основание линий на третьем столбцовом использовании -F ','
.
awk -F',' '!seen[$3]++' filename