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

  • рекурсивный поиск шаблона, затем для каждого матча распечатывают конкретный номер строки SEQUENCE: номер файла и отсутствие содержимого файла
  • Как исключить строки, которые дали столбцы?
  • awk, если регулярное выражение не совпало
  • Выберите каждые две строки, если они начинаются с того же имени
  • Уменьшить использование файлов в текстовой обработке
  • Как использовать awk для печати, если значение столбца имеет четное число
  • Игнорировать разделитель, присутствующий внутри кавычек
  • Сравните два массива в KSH и выведите разницу
  • 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 (уникальный) удаляет дублированные строки.

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