다른 파일의 상위 및 하위 값을 사용하여 유닉스에서 파일을 grep하는 방법

다른 파일의 상위 및 하위 값을 사용하여 유닉스에서 파일을 grep하는 방법

파일 이름이 포함된 특정 파일에서 grep을 수행하는 방법을 묻고 싶습니다. grep의 조건은 다른 파일에서 나옵니다. 예:

fileA.txt에는 다음이 포함됩니다.

newFile0001_1573001341083_123_0.txt
newFile0002_1573001341207_134_0.txt
newFile0003_1573415111000_251_0.txt
newFile0004_1999999999991_238_0.txt
newFile0005_1573002061581_305_0.txt    

fileB.txt에는 다음이 포함됩니다.

870752450724347692,2019-11-11 00:12:17,1573411337,1573407737,1573414937
870423450725349173,2019-11-11 00:21:08,1573411868,1573408268,1573415468
868909450732354559,2019-11-11 00:56:43,1573414003,1573410403,1573417603

두 번째 열은 날짜/시간이고,

세 번째 열은 에포크의 날짜/시간입니다.

네 번째 열은 날짜/시간 - 1시간(epoch)입니다.

다섯 번째 열은 날짜/시간 + 1시간(epoch)입니다.

-

fileA.txt를 grep하는 방법(일치하는 모든 newFile0000_XXXXXXXXXX000_000_0.txt 가져오기)

네 번째 열(하한)과 다섯 번째 열(상한)을 fileB.txt의 각 행에 대한 범위로 사용하시겠습니까?

따라서 예제에서 fileA.txt의 세 번째 항목은 fileB.txt의 두 번째 항목을 기반으로 얻어야 ​​합니다.

답변1

사용 awk:

awk -F, 'NR==FNR { myArray[$0]=substr($0,13,10); next } 
                 { for (file in myArray) {
                       if (myArray[file]>=$4 && myArray[file]<=$5) 
                           { print file; delete myArray[file] }
                       }
                 }' fileA.txt fileB.txt

여러 구분 기호를 사용하는 대신 사용할 수 있습니다. 첫 번째 코드 블록을 다음으로 변경합니다.

NR==FNR { myArray[$0] = $2/1000; next }

다음과 같이 실행하세요:

awk '...awk-script...' FS=_ fileA.txt FS=, fileB.txt

관련 정보