我正在处理一个包含超过 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
答案4
这似乎对我有用:
egrep '^.?,(jpn|por),.*$' file1.csv > file2.csv