使用 grep 或其他工具搜索大型 CSV 文件

问题描述 投票:0回答:1

我有一个 4 gig CSV,我正在尝试搜索以获取 CSV 的子集。我有一个 csv 文件,其中包含我正在搜索的关键字(这些关键字将位于大 csv 的第一列中)。

我尝试了这条线,但最终花了一个多小时才完成。我需要使用 tr 来摆脱 Windows 返回字符。

LC_ALL=C grep -F -i -f <(tr -d '\r' < keywords.csv) big_csv.csv > output.csv

我可以优化这个吗?我缺少什么吗?使用 awk 或其他工具会更好吗?我什至考虑过排序,然后按第一行拆分大 csv,这样当我搜索时,我可以只按文件名搜索关键字,然后将其附加到新文件中。这有最佳实践吗?我正在尝试使其尽可能符合 POSIX

根据要求,这里是一些示例数据。

ADLV,-1.741774,0.961072,-0.751392,-0.935572,-2.269994,1.081103,-0.831244,1.540083,0.474326,-1.322924,2.199037,-0.919939,0.641496,-0.584152,0.729028,0.608351,-0.522026,0.966026,-0.793949,-1.623368,1.16177,-0.642438,-0.675811,-0.214964,-2.263053,2.188642,0.302449,0.770106

行中有更多数据,但太长,无法在此处发布。

关键字文件会是这样的

ADLV
ADVG

keywords.csv 最多有 1,000 个关键字。每个关键字都是 4 个字母。

这是包含示例数据的要点https://gist.github.com/fishnibble/9d95658c352a1acab3cec3e965defb3f

linux bash csv awk grep
1个回答
0
投票

我认为您需要的是:

awk -F, 'NR==FNR{keys[$0]; next} $1 in keys' keywords csv
© www.soinside.com 2019 - 2024. All rights reserved.