중복된 항목을 제거하고 싶습니다.이자형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
중복된 행을 (고유하게) 제거하면 됩니다.