我有一个CSV文件,它有近50k的记录。我想从此文件中删除不必要的记录。任何人都可以告诉我如何通过查找和替换Regex实现这一目标?
数据如下所示:
Item Code,,Qty
CMAC-389109,,6
,Serial No.,
,954zg5,
,ffnaw8,
,gh8731,
,gxj419,
,hc6y9q,
,y65vh8,
CMAC-394140,,1
,Serial No.,
,4cu3z7,
我希望将此数据转换为以下格式:
ItemCode,Serial Number,Qty
CMAC-389109,"954zg5, ffnaw8, gh8731, gxj419, hc6y9q, y65vh8",6
CMBM-394140,"4cu3z7",1
答案 0 :(得分:0)
这是一个捕获两个组(Item Code
和Shelf
)的正则表达式:
^([^,]*?)(?:,(?:[^,]+)?){5},([^,]+),.*$
我不知道DW用来引用组的语法。但通常它是$n
或\n
,所以在您的情况下,您可以将$1, $2
放入"替换"搜索/替换框的字段。或\1, \2
。
如果您可以访问Linux环境(OS-X和Cygwin也可以使用),您可以使用命令行工具cut
和grep
来轻松完成此任务:
cat <filename> | cut -d ',' -f 1,7 | grep -v "^,$" > <output_file>
我在cut
上使用的参数是:
<强> -d 强> 分隔符(字段分隔的字符)
<强> -f 强> 字段(要包含在输出中的字段)。
...和grep
:
<强> -v 强> 反转模式:仅包含与正则表达式匹配的输出 中的行。
根据您的问题中的数据,上述命令将产生以下结果:
Item Code,Shelf
CMAC-386607,M5-2
CMAC-389109, F2-3
这也应该非常有效,因为cut
适用于流,并且只根据需要将尽可能多的数据加载到内存中。因此,在执行任务之前,您不需要加载整个文件。它是一个大文件,这可能很方便。