여러 파일에서 정확한 문자열을 동시에 파악하는 방법

여러 파일에서 정확한 문자열을 동시에 파악하는 방법

아래와 같이 폴더에 여러 파일(텍스트 파일)이 있습니다. 여기서 첫 번째 파일에는 일부 경로가 문자열로 포함되어 있고 다른 파일에는 경로+파일 이름이 포함되어 있습니다.

파일 1:

[root@centos7 test]# pwd
/root/test
[root@centos7 test]# cat file1.txt
/abc/bce/12345/input/part3
/abc/bce/12345/input/part3/err
/abc/bce/34563/input
/abc/bce/34563/input/part1
/abc/bce/34563/input/part3/wrk
/abc/bce/11198/input/VII
/abc/bce/11198/input/VII/err
/abc/bce/11198/input/VII/part3
/abc/bce/11198/input/VII/part3/err
[root@centos7 test]#

파일 2:

[root@centos7 test]# pwd
/root/test/test
[root@centos7 test]# cat file2.txt
/abc/bce/12345/input/part3/AIR9905.txt--20210421--
/abc/bce/12345/input/part3/AIR9923.txt--20210315--
/abc/bce/12345/input/part3/err/AIR9950.txt--20200512--
[root@centos7 test]#

파일 3:

[root@centos7 test]# pwd
/root/test/test
[root@centos7 test]# cat file3.txt
/abc/bce/12345/input/part3/err/AIR1034.txt--20210110--
/abc/bce/34563/input/part1/AIR3426.txt--20200420--
/abc/bce/11198/input/VII/part3/err/V.AIR7650.txt--20170625--
[root@centos7 test]#

현재 출력:

test/file2.txt:/abc/bce/12345/input/part3/AIR9905.txt--20210421--
test/file2.txt:/abc/bce/12345/input/part3/AIR9923.txt--20210315--
test/file2.txt:/abc/bce/12345/input/part3/err/AIR9950.txt--20200512--
test/file3.txt:/abc/bce/12345/input/part3/err/AIR1034.txt--20210110--

예상 출력:

test/file2.txt:/abc/bce/12345/input/part3/AIR9905.txt--20210421--
test/file2.txt:/abc/bce/12345/input/part3/AIR9923.txt--20210315--

나는 grep -rHw "/abc/bce/12345/input/part3" test/file1의 행을 일치시키고 file2, file3 등에서 해당 정보를 추출하는 데 사용합니다. 그러나 문제는 행을 검색하려고 할 때 file2, file3 등에서 유사한 행을 모두 가져오는 것입니다. file1을 여러 파일과 연속적으로 비교할 때 이 작업을 수행하는 방법을 모르겠습니다.

답변1

file2.txt귀하의 질문을 올바르게 해석하면 귀하의 예에서 행을 찾고 싶고 file3.txt(a) 문자열 "/abc/bce/12345/input/part3" + 추가된 문자열(파일 이름)을 포함하지만(b)아니요다른 "/abc/bce/12345/input/part3/ 포함" 문자열. 내가 아는 한, 당신이 원하는 것은 적어도 grep단일 명령으로는 불가능합니다.

그 이유는 당신이 동시에하다grep검색어를 기반으로 더 긴 문자열을 찾으려는 경우 (예: "/abc/bce/12345/input/part3"은 "test/file2.txt:/abc/bce/12345/input/part3/AIR9905.txt--"와 일치함) 20210421--") 및아니요grep검색어를 기반으로 더 긴 문자열을 찾으려는 경우(예: "/abc/bce/12345/input/part3"은 "test/file2.txt:/abc/bce/12345/input/part3/"와 일치함 )/AIR9950.txt--20200512---").

귀하가 제시한 특정 예에서는 이렇게 할 수 있지만 grep -rHw "/abc/bce/12345/input/part3" test/ | grep -v "/err"분명히 모든 경우에 작동하는 보편적인 솔루션은 아닙니다.

관련 정보