![读取较大的文件 A 并检索第二个文件中的相关字符串并创建输出](https://linux22.com/image/117197/%E8%AF%BB%E5%8F%96%E8%BE%83%E5%A4%A7%E7%9A%84%E6%96%87%E4%BB%B6%20A%20%E5%B9%B6%E6%A3%80%E7%B4%A2%E7%AC%AC%E4%BA%8C%E4%B8%AA%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E7%9B%B8%E5%85%B3%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%B9%B6%E5%88%9B%E5%BB%BA%E8%BE%93%E5%87%BA.png)
我正在对两个较大的文件(1.6 到 4700 万个条目)运行 for 循环,并且每行 grep 都花费了很多时间。想知道我是否可以在这里使用另一种更快的解决方案。基本上,我需要读取每一行的 FILE-A 并将其与 FILE-B.csv 进行 grep 并创建结果输出。
FILE-A: (1.6 million IDs)
FILE-B.csv: (47 million IDs & Other Attributes)
for UID in $(cat FILE-A); do
cat FILE-B.csv | grep $i >> OUTPUT-FILE.csv
done
答案1
grep -F -f FILE-A FILE-B.csv
-f
指定从中获取模式的文件。 -F
将模式指定为固定字符串,以换行符分隔。
就您最初的代码思想而言,管道输入cat
是grep
一种无用的资源浪费。 grep
可以直接读取文件。