LINUX.ORG.RU

bash: удаление повторяющихся строк

 , ,


1

2

И снова доброго времени. Опять требуется помощь в написании скрипта. Задача следующая: есть 2 файла- файл A, файл B. Файл А содержит несколько сотен строк, файл B несколько тысяч. В каждом файле 1 столбец. Нужно сравнить файл А и файл B на предмет одинаковых строк и, главное, удалить одинаковые в обоих файлах строки ТОЛЬКО из файла В. Пока дошел только до чего то такого:

cat A B|sort|uniq -c|sed -e 's/^ *1 //;t;d'
Получаю, не совсем то, что нужно. Выводом является уникальные строки как из файла А, так и из В. Ну и разумеется не хватает, как итог, части с удалением. Можно было, конечно, записать вывод в еще один файл С, а затем поочередно сравнить с файлами A и B, но это все грозит перелиться в многочасовой перебор. Хотелось бы все «в одну строку». Заранее благодарен за информативные и непосылающие в маны ответы.


fgrep -v -f A.txt B.txt > result.txt ## ?

bl ★★★
()

Оказывается, все проще, чем я думал. С удалением докумекал. Спасибо intelfx и bl за подходящие решения.

zdravo
() автор топика
Ответ на: комментарий от zdravo

С удалением докумекал.

Если я правильно понял ман, то решение предложенное intelfx уже удаляет общие для обоих файлов строки, выводя только уникальные для файла B. Все что остается - направить вывод комманды в целевой файл. Тоесть в итоге должно быть что-то типа

comm -13 <(sort -u A) <(sort -u B)|cat > output

Csandriel
()
Ответ на: комментарий от zdravo

Хм, да и решение bl тоже, вроде как, выводит уже очищенный от дублируемых в обоих файлов строк текстовый поток. Тоесть, по идее

fgrep -v -f <(sort -u A.txt) <(sort -u B.txt)|cat > result.txt

должен сработать точно так же.

Csandriel
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.