파일 2에 항목이 있는 경우 파일 1에서 중복된 항목을 제거합니다.

파일 2에 항목이 있는 경우 파일 1에서 중복된 항목을 제거합니다.

중복된 항목을 제거하고 싶습니다.이자형file1만약 에부터이자형에도 존재합니다 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

답변1

첫째, 원하는 출력은 다음과 같아야 합니다.

y2  x2
y4  x4
y5  x5
y6  x6

두 파일 모두 "x3 y3"과 "x1 y1"이 존재하기 때문에

file1에 있는 행을 얻으려면 다음을 수행하면 됩니다.

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.)  

답변2

이 시도:

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중복된 행을 (고유하게) 제거하면 됩니다.

관련 정보