![如何在 unix 中使用另一个文件的上限值和下限值在文件中进行 grep](https://linux22.com/image/163815/%E5%A6%82%E4%BD%95%E5%9C%A8%20unix%20%E4%B8%AD%E4%BD%BF%E7%94%A8%E5%8F%A6%E4%B8%80%E4%B8%AA%E6%96%87%E4%BB%B6%E7%9A%84%E4%B8%8A%E9%99%90%E5%80%BC%E5%92%8C%E4%B8%8B%E9%99%90%E5%80%BC%E5%9C%A8%E6%96%87%E4%BB%B6%E4%B8%AD%E8%BF%9B%E8%A1%8C%20grep.png)
我想问如何在包含文件名的某个文件中进行 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