удалить дублируемую запись из файла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 

  • Сравните два журнала по строкам и покажите различия, и если порядок слов из строки не совпадает
  • Как записывать данные по одному из файлов tmp в конечный выходной файл, используя для цикла?
  • Добавьте mtime к выходу grep -c и отсортируйте результат по mtime
  • Как удалить повторяющиеся слова с суффиксами?
  • Найти и перенаправить для получения имени файла шаблона
  • awk getline не работает, как ожидалось, на итерации первого цикла
  • определение номера столбца с использованием строки в awk
  • Sed Заменить в определенной группе позиций
  • 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 (уникальный) удаляет дублированные строки.

    Interesting Posts

    zsh: Стоит ли переключиться с bash? Это время?

    Ищете эффективную альтернативу ssh-copy-id, которая терпит неудачу, если у вас нет частной части ключа?

    Как POST «вывод оболочки» как данные JSON с помощью Curl

    Как установить GMP на CentOS?

    Попытка убить процессы работы cron, найденные «ps ax | grep ключевое слово "зарегистрировано как пользователь pi

    Существуют ли оболочки, которые поддерживают типизированные переменные и многомерные массивы?

    mutt: макрос для сохранения сообщений в папку

    Замена точек в имени файла символами подчеркивания, кроме расширения

    Как отмечать трафик с помощью IPtables?

    Как проверить готовность системы для установки NTFS пользователем?

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

    Как вы можете достичь «se ai» vi в Emacs?

    Какую из VPN или IPSec или xxx я могу использовать здесь?

    awk: печатать строки после матча до конца файла

    Как освободить экстенты физического объема? lvm, зашифрованный

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