在UNIX中查找另一个文件中的一个文件的内容

Tir*_*kar 30 grep file

我有2个文件.第一个文件包含数据库中表的元组的行ID列表.第二个文件包含查询的"where"子句中包含这些行ID的SQL查询.

例如:

档案1

1610657303
1610658464
1610659169
1610668135
1610668350
1610670407
1610671066
Run Code Online (Sandbox Code Playgroud)

档案2

update TABLE_X set ATTRIBUTE_A=87 where ri=1610668350;
update TABLE_X set ATTRIBUTE_A=87 where ri=1610672154;
update TABLE_X set ATTRIBUTE_A=87 where ri=1610668135;
update TABLE_X set ATTRIBUTE_A=87 where ri=1610672153;
Run Code Online (Sandbox Code Playgroud)

我必须阅读文件1并在文件2中搜索与文件1中的行ID匹配的所有SQL命令,并将这些SQL查询转储到第三个文件中.

文件1有1,00,000个条目,文件2包含10倍的文件1条目,即1,00,0000.

我用过grep -f File_1 File_2 > File_3.但这非常慢,速度是每小时1000个条目.

有没有更快的方法来做到这一点?

fiz*_*zer 37

你不需要regexp,所以 grep -F -f file1 file2

  • 但没有-F属性 (9认同)
  • 在我的机器上:grep => 38.4s real; awk => 53.8s真实; file1 19 ^ 6行,file2 10 ^ 7行. (5认同)
  • 我在机器上执行了相同的测试,使用grep -F效果很好,需要注意的是-F(captial)将模式解释为固定字符串列表(而不是正则表达式),并用换行符分隔,这是要匹配的,这就是为什么与仅使用-f的awk或常规grep相比非常快的原因。希望这可以帮助 !! (2认同)

jay*_*ngh 17

一种方式awk:

awk -v FS="[ =]" 'NR==FNR{rows[$1]++;next}(substr($NF,1,length($NF)-1) in rows)' File1 File2
Run Code Online (Sandbox Code Playgroud)

这应该很快.在我的机器上,花了不到2秒的时间创建了100万个条目的查找,并将其与300万行进行比较.

机器规格:

Intel(R) Xeon(R) CPU E5-2670 0 @ 2.60GHz (8 cores)
98 GB RAM
Run Code Online (Sandbox Code Playgroud)