我有一个 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
我认为您需要的是:
awk -F, 'NR==FNR{keys[$0]; next} $1 in keys' keywords csv