удалить дублируемую запись из файла1, если запись присутствует в файле2

Я хочу удалить повторяющуюся запись e из file1 если e также присутствует в file2 .

Входной file1 :

 x1 y1 x2 y2 x3 y3 x4 y4 y1 x1 x5 y5 y3 x3 x6 y6 x5 y5 

Входной file2 :

 y1 x1 y2 x2 y3 x3 y4 x4 x1 y1 y5 x5 x3 y3 y6 x6 x5 y5 

Желаемый результат:

 x1 y1 x2 y2 x3 y3 x4 y4 x5 y5 x6 y6 

Я использовал следующий сценарий оболочки:

 awk 'FNR==NR { lines[NR,"col1"] = $1 lines[NR,"col2"] = $2 lines[NR,"line"] = $0 next } (lines[FNR,"col1"] != $1) {($1 in lines) print lines[FNR,"line"] next }' file1.txt file2.txt 

Но он дает следующий результат:

 x1 y1 x2 y2 x3 y3 x4 y4 y1 x1 x5 y5 y3 x3 x6 y6 

2 Solutions collect form web for “удалить дублируемую запись из файла1, если запись присутствует в файле2”

Во-первых: ваш желаемый результат должен быть:

 y2 x2 y4 x4 y5 x5 y6 x6 

потому что «x3 y3» и «x1 y1» присутствуют в обоих файлах

для получения строк, которые присутствуют в файле1, вы можете просто сделать

 grep -v -f file1 file2 

Из справочной страницы

 -v --invert-match Invert the sense of matching, to select non-matching lines. (-v is specified by POSIX.) -f file --file=file Obtain patterns from file, one per line. The empty file contains zero patterns, and therefore matches nothing. (-f is specified by POSIX.) 

Попробуй это:

 awk '{if($1>$2) print $2 " " $1; else print $0;}' file1.txt file2.txt | sort -u > out.txt 

это выведет:

 x1 y1 x2 y2 x3 y3 x4 y4 x5 y5 x6 y6 

awk просто переупорядочивает столбцы по алфавиту, sort -u (уникальный) удаляет дублированные строки.

  • Правильно ли замените & & XML?
  • Обнаружение необязательного аргумента функции awk
  • Как рассчитать сумму данных, имеющих один и тот же идентификатор в первом столбце?
  • Создание списков слов по двоичным числам
  • Переупорядочить текстовый файл путем добавления строк данных со строкой заголовка
  • Как выполнить многострочный grep
  • Сравните несколько файлов и печать сходства и различий
  • Как преобразовать один файл столбца в одну строку?
  • извлекать текст между двумя разными совпадениями
  • Параметр awk split char
  • Инструмент командной строки для извлечения строк из текстового файла
  • Interesting Posts

    Как вы находите, какие ключи являются символами «стереть» и «убить строку» в Ubuntu?

    Как вы освобождаете ресурсы в Ubuntu?

    Пересылка Cc на удаленную сессию tmux

    Каковы сильные и слабые стороны алгоритмов ssh-keygen и один из них наиболее безопасен?

    Ошибка CMake: текущий каталог отличается от

    Как найти исполняемые файлы в каталоге

    Apache: Имитировать 100 новых подключений в секунду с помощью ab

    Catch «команда не найдена» из сценария оболочки

    Как мне запустить команду в другом tty?

    cut / grep и df -h

    Маленькая недорогая коробка * nix?

    Как дождаться загрузки зоны Solaris (первый раз)

    Есть ли способ просмотра вывода консоли вместо загрузочного логотипа, в то время как моя машина RHEL 6.2 загружается?

    BASH – Ассоциативный массив – получение значения ключа в конечном элементе

    Почему запуск второго сервера X визуализировал клавиши Ctrl + Alt + Fn, неспособные переключать настольные компьютеры?

    Linux и Unix - лучшая ОС в мире.