在我们公司,我们从第三方获取库存文件。这些文件采用固定格式,包含 13 位 EAN(想想 UPC 代码)以及其他数据。我的数据库中还有一个 EAN 主列表。
我想将主文件与新文件进行比较,并从新文件中删除所有行,其中包含不在主文件中的 EAN。
示例:大师
1234567890123
4567890123456
新文件 1234567890123 4567890123456
5678901234567 <- 删除这个
新文件包含 EAN 以外的数据。EAN 在第一列。数据是制表符分隔的。
我目前正在 PHP 中执行此操作。问题是两个文件都有大约 4 百万。每一行,我的脚本都消耗大量内存。我目前将整个主列表加载到 RAM 中并执行 isset()s。
有什么聪明的 linux 技巧/程序可以帮助我吗?
以更 grep 友好的方式重新表述问题,您希望打印与某个 EAN 主列表中的 EAN 匹配的所有行。
假设类似于 EAN 的东西不会出现在 EAN 列之外的任何地方,请尝试:
master
假设 EAN 是
master
(并且该主包含其他列)的第一列应该接近(您可以删除
awk
ifmaster
只是一个 EAN 列表;讨厌的 sed 在最后删除|
来自管道其余部分的尾随)如果 EAN(或类似 EAN 的 13 位模式)存在于数据中的其他位置,则上述内容将失效,并且需要更复杂的正则表达式来将搜索限制为特定列。
尝试这样的事情: