Grep 过滤巨大的 CSV 文件

YLe*_*ven 5 bash grep csv

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

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

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

有没有更有经验的用户会善待并借我一些帮助?

提前致谢!:D

aff*_*aff 13

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

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

awk -F, '$2 ~ /jpn|por/ {print}' file1.csv > file2.csv
Run Code Online (Sandbox Code Playgroud)

说明:

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