첫 번째 파일 내용이 다른 파일과 부분적으로 일치하고 세 번째 파일에 기록되었습니다.

첫 번째 파일 내용이 다른 파일과 부분적으로 일치하고 세 번째 파일에 기록되었습니다.

주어진 파일 1...

2/26a- 6
23/26a- 20z
23/26A-18

그리고 파일 2...

2/26a-6
23/26a- 20Z
23/26A-18
25/2a -18
22/34B-19

파일 2에서 파일 1의 내용을 검색하는 방법은 무엇입니까? 여기서 출력은 다음과 같아야 합니다.

2/26a-6
23/26a- 20Z
23/26A-18

(따라서 정확한 일치는 아니지만 일부 공유된 내용입니다.) 일치 항목은 대소문자를 구분해야 합니다.

답변1

당신을 위한:

tr -d " \t\r" < file1 > X

tr -d " \t\r" < file2 > Z

그런 다음:

grep --ignore-case -Fxf X Z

완벽한!

답변2

file1의 내용을 수정하여 하나 이상의 공백 문자 시퀀스를 0개 이상의 공백 문자를 나타내는 정규식으로 바꿀 수 있습니다.

sed 's/[[:space:]]\{1,\}/[[:space:]]*/g' file1
2/26a-[[:space:]]*6
23/26a-[[:space:]]*20z
23/26A-18

그런 다음 이를 대소문자를 구분하지 않는 grep의 패턴 파일로 사용합니다.

sed 's/[[:space:]]\{1,\}/[[:space:]]*/g' file1 | grep -if- file2
2/26a-6
23/26a- 20Z
23/26A-18

참고: 이 방법은 항목에 file1다른 특수 문자가 포함되어 있지 않은 경우에만 작동합니다. 만약 그렇다면 적절하게 이스케이프 처리해야 합니다.

관련 정보