使用 Grep 过滤巨大的 CSV 文件

使用 Grep 过滤巨大的 CSV 文件

我正在处理一个包含超过 200 万行的 CSV 文件。相当大。

如果第二列的值与“jpn”或“por”匹配,我需要使用 grep(或任何更好的方法)来检索整行。

我尝试过grep '<\jpn\>' || grep '<\por\>' file1.csv > file2.csv,但目前还没有成功。主要问题是“por”在第三列中很常见,这会产生超过一百万行不需要的行。

有没有更有经验的用户愿意帮助我?

先谢谢了

答案1

您使用的是哪种 Linux 操作系统?egrep如果您想在 grep 版本过时的系统(例如 Solaris)中使用正则表达式,请尝试使用。

无论如何,这是一个 awk 解决方案:

awk -F, '$2 ~ /jpn|por/ {print}' file1.csv > file2.csv

解释:

  • awk用于基于列的操作
  • -F,定义列分隔符/标记器,在本例中我使用逗号
  • $2 ~ /jpn|por/使用表达式测试第 2 列/jpn|por/
    • $2是第 2 列
    • /jpn|por/是匹配 jpn 或 por 的正则表达式
  • {print}指定 awk 在找到匹配行时应输出的内容
    • print打印整个输入行(或者,print $3只打印第 3 列)
  • ... file1.csv指定从输入文件而不是标准输入读取

答案2

grep '; jpn;\|; por;' /path/to/file1.csv > file2.csv

假设分号(;)是分隔符。

答案3

我认为grep这是解决这个问题的有限的方法,因为它没有考虑不同的分隔符和转义分隔符。

我建议你看看文字问答(免责声明 - 我是它的开发者)。它可以导入大型 CSV 文件并允许您管理其架构/结构。

您可以通过 UI 查询生成器或 SQL(选择、连接、分组等)执行查询。

这里有一个视频演示更详细的教程

最后,您可以将任何查询导出到 CSV 文件,该文件可以导入 MS Excel 或其他格式。您可以从Mac 应用商店或 Microsoft Store(即将推出)。

答案4

这似乎对我有用:

egrep '^.?,(jpn|por),.*$' file1.csv > file2.csv

相关内容