파일이 두 개 있어요파일 A&문서 B
fileA에는 많은 IP가 있고 fileB에는 더 적은 IP가 있습니다. 우리는 무엇을 해야 합니까?
fileA - fileB = fileC(공용 IP가 없는 파일)
파일 A
1.1.1.1
2.2.2.2
3.3.3.3
4.4.4.4
5.5.5.5
문서 B
4.4.4.4
1.1.1.1
파일C
2.2.2.2
3.3.3.3
5.5.5.5
Google에 많은 옵션이 있지만 관련된 항목을 찾을 수 없습니다.
답변1
이 comm
도구는 특히 영숫자순으로 정렬되는 결과에 관심이 없는 경우 유용할 수 있습니다.
comm -23 <( sort -u fileA ) <( sort -u fileB ) >fileC
사용에 대한 자세한 내용은 man sort
및 을 참조하십시오.man comm
답변2
이를 위해 fileA - fileB
awk를 사용할 수 있습니다(이렇게 하면 에서만 IP를 얻을 수는 없습니다 fileB
).
awk 'NR==FNR{a[$0];next}!($0 in a)' fileB fileA
NR
총 레코드 수를 나타내며, FNR
현재 파일의 레코드 번호(보통 줄 번호)를 나타냅니다. 따라서 첫 번째 파일에 줄이 있으면 두 번째 파일에는 나타나지 않습니다.
fileA에서 중복 행을 제거해야 하는 경우 다음을 사용합니다.
awk 'NR==FNR{a[$0]++;next}!a[$0]++' fileB fileA
답변3
이 질문은 여러 가지 다른 방식으로 설명될 수 있습니다.
각 줄은 해당 파일 내에서 고유하다고 가정합니다.
fileA
에도 있는 항목을 삭제한다고 가정해 보겠습니다fileB
.fileB
이렇게 하면 다음에서 발견된 IP 주소가 제거됩니다fileA
.grep -v -Fx -f fileB fileA >fileC
여기에 사용된 옵션은
grep
패턴(fileB
using 에서 읽은 행-f
)이 정규식(-F
)이 아닌 문자열로 처리되고 하위 문자열( )이 아닌 전체 행과 일치하는지 확인합니다-x
. 또한 일치의 의미를 바꾸어 의 어떤 행과도 일치하지 않는 모든 행을-v
출력합니다 .fileA
fileB
고유한 모든 항목을 얻고 싶다고 가정해 보겠습니다.
fileA
또는고유한 기능은 다음과 같습니다fileB
.다음 출력 파일에 중복되지 않은 줄이 있습니다. 비표준이지만 후속 라인에서 반복되지 않는 라인을 출력하기 위해 일반적으로 사용되는 옵션인
-u
with 를 사용합니다 .uniq
sort fileA fileB | uniq -u >fileC
답변4
순서를 유지하는 것이 중요하지 않은 경우 먼저 첫 번째 파일에서 중복 항목을 제거한 다음 출력을 두 번째 파일과 두 번 연결(고유한 항목을 제거하기 위해)한 다음 uniq -u
.
sort -u fileA | cat - fileB fileB | sort | uniq -u