如何在 unix 中使用另一个文件的上限值和下限值在文件中进行 grep

如何在 unix 中使用另一个文件的上限值和下限值在文件中进行 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 小时(纪元),

第五列是日期/时间 + 1 小时(纪元)。

-

如何在 fileA.txt 中 grep (获取每个匹配的 newFile0000_XXXXXXXXXX000_000_0.txt)

使用第四列(下限)和第五列(上限)作为 fileB.txt 中每一行的范围?

因此,从示例中,应根据 fileB.txt 第二个条目获取 fileA.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

相关内容