Ошибки ввода - вывода означают, что в стадии реализации существует некоторая потеря данных, что означает в значительной степени, что никакая информация относительно того конвейера не будет достоверной.
Я пропустил бы часть диагноза и рассмотрел бы спасательные сценарии данных.
Я не уверен, что понимаю Ваш вопрос, но Ваш код может быть оптимизирован к:
awk '!x{a[$0];next}; !($0 in a)' foo/file x=1 bar/file > tmp
(Ваш имел проблемы для пустых строк или строк, решающих к "0" в них, я думаю),
Если файлы отсортированы, Вы могли бы сделать:
comm -13 foo/file bar/file > tmp
Если они не (ksh93. zsh или синтаксис удара):
comm -13 <(sort foo/file) <(sort bar/file) > tmp
(не обязательно быстрее, чем awk решение)
Кроме того, особенно с GNU awk, можно получить лучшую производительность путем установки локали на C/POSIX:
LC_ALL=C awk ...
у меня было несколько файлов размером по несколько мегабайт каждый, и я попробовал это, что работает на меня:
sort *.csv | uniq -d
Это даст вам дубликаты записей из вашего файла, а затем вы можете перенаправить вывод на один файл, чтобы получить дубликаты записи, и удаление -d
даст вам все уникальные записи.
comm -13
приблизьтесь теперь и существует значимая скорость.Спасибо! – stefan 11.09.2012, 15:38