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

  • awk, как изменить значение файла с помощью наборов параметров?
  • сопоставление образцов awk и файлы слияния
  • как изменить один столбец и добавить другие столбцы в строке awk
  • Массив с двумя входными файлами awk
  • Непоследовательное поведение в awk
  • Извлечение текстовой строки из файла, присвоение ее переменным, а затем их запись в другой файл?
  • grep и добавить его в конец строки
  • помочь понять часть awk-программы
  • 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 - лучшая ОС в мире.