파일 이름이 포함된 특정 파일에서 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