【发布时间】:2018-05-29 18:02:18
【问题描述】:
问题
我在一个文件夹中有数千个 csv 文件。每个文件有 128,000 个条目,每行有四列。 有时(一天两次)我需要将一个列表(10,000 个条目)与所有 csv 文件进行比较。如果其中一个条目与其中一个 csv 文件的第三或第四列相同,我需要将整个 csv 行写入一个额外的文件。
可能的解决方案
Grep
#!/bin/bash
getArray() {
array=()
while IFS= read -r line
do
array+=("$line")
done < "$1"
}
getArray "entries.log"
for e in "${array[@]}"
do
echo "$e"
/bin/grep $e ./csv/* >> found
done
这似乎有效,但它会永远持续下去。将近 48 小时后,脚本只检查了大约 10,000 条的 48 个条目。
MySQL
接下来的尝试是将所有 csv 文件导入 mysql 数据库。但是我的表在大约 50,000,000 个条目时遇到了问题。 所以我写了一个脚本,它在 49,000,000 个条目后创建了一个新表,因此我能够导入所有 csv 文件。 我试图在第二列上创建一个索引,但它总是失败(超时)。在导入过程之前创建索引也是不可能的。它将导入速度从几个小时缩短到了几天。 select 语句很糟糕,但它确实有效。比“grep”解决方案快得多,但仍然很慢。
我的问题
我还能尝试在 csv 文件中搜索什么? 为了加快速度,我将所有 csv 文件复制到 ssd。但我希望还有其他方法。
【问题讨论】:
-
您能否举例说明 CSV 文件和列表的外观?
标签: mysql shell csv search grep