Удалите строки на основе дубликатов в одном столбце без вида

Вы могли также рассмотреть использование подхода join так как Вы хотите отсортированный вывод в конце. Как:

join -t, -j2 <(sort -t, -k2 file1) <(sort -t, -k2 file2) |
   awk -F, '{n=$3-$2; if (n) print n, $1}'
30
31.07.2017, 14:34
2 ответа

Сортировка Команда уже оптимизирована для обработки огромных файлов. Таким образом, вы могли бы очень хорошо использовать команду сортировки в вашем файле, как,

sort -u -t' ' -k3,3 file
  • -U - Печать только уникальных строк.
  • -T - укажите разделитель. Вот в этом примере я просто использую пространство в качестве разделителя.
  • -K3,3 - Сортировать на 3-м поле.

Вы можете ссылаться на это Ответ, который говорит о том, что GNU сортирует на самом деле лучше подходить для сортировки больших файлов. В вашем случае я думаю даже без -Parallel , вы могли бы достичь вашего конечного результата без особой временной задержки.

18
27.01.2020, 19:38

Просто измените команду awk в столбец, который вы хотите выполнить, чтобы удалить дублированные строки на основе (в вашем случае третьего столбца):

awk '!seen[$3]++' filename

Эта команда говорит awk , какие строки для печати. Переменная $ 3 содержит все содержимое колонны 3 и квадратные скобки - это доступ к массиву. Итак, для каждого третьего столбца строки в имею имени файла узел массива с именем увеличивается, и линия напечатана, если содержимое этого узла (столбец3) не было (! ) ранее установленные.

Выше AWK Команда будет работать, если ваши столбцы в входном файле разделите с пространством или вкладку между собой, если столбцы, разграниченные с чем-то еще, вы Необходимо сказать это на awk с вариантом -F . Таким образом, например, если все столбцы разграничиваются с запятой (, ) и хотят удалить основание линий на третьем столбцовом использовании -F ',' .

awk -F',' '!seen[$3]++' filename
31
27.01.2020, 19:38

Теги

Похожие вопросы