使用ColdFusion和Miller转换TSV数据(命令行大显身手!)
内容提要
我们从多个供应商获得数据许可,并发现即使是相同规范的数据也不能一视同仁。例如,我们与两个不同的房地产交易标准(RETS)提供商合作,它们的实现略有不同。我们与西海岸的供应商合作了近20年,一直保持一致,没有遇到任何与数据相关的问题。然而,与位于东南部的新的RETS提供商合作时,偶尔会出现一个单一的邮政编码值包含ZIP+4而不是通用的5位数ZIP的问题。这在我们的长期供应商那里从未出现过问题,而这个变化导致了将数据批量导入到Microsoft SQL Server时出错。我正在探索是否可以通过命令行转换数据,并发现了Miller(BSD2;Linux/Mac/Windows)。Miller类似于awk、sed、cut、join和sort,用于处理以名称索引的数据,如CSV、TSV和表格化JSON。使用Miller,您可以使用命名字段而无需计算位置索引,使用熟悉的格式,如CSV、TSV、JSON、JSON Lines和位置索引。然后,您可以在运行时添加新字段,这些字段是现有字段的函数,删除字段,排序,统计聚合,漂亮打印等。Miller的语法并不太复杂,有一个专门用于标志、动词和函数的ReadTheDocs网站,并提供了一些常见问题和示例。简而言之,我需要:设置-I标志以原地处理文件,设置输入格式:--itsv,设置输出格式:--otsv,显式设置输出行分隔符:--ors'\r\n'(如果不设置,它会将Windows CR/LF转换为Linux LF),使用put命令转换现有列的数据:put'$PostalCode = substr($PostalCode,0
关键要点
- 我们从多个供应商获得数据许可,发现即使是相同规范的数据也不能一视同仁。
- 与两个不同的房地产交易标准(RETS)提供商合作,它们的实现略有不同。
- 与西海岸的供应商合作近20年,一直保持一致,没有遇到数据相关问题。
- 与东南部的新RETS供应商合作时,偶尔出现邮政编码值包含ZIP+4的问题。
- 这个变化导致数据批量导入到Microsoft SQL Server时出错。
- Miller是一个用于处理以名称索引的数据的工具,类似于awk、sed、cut、join和sort。
- 使用Miller可以使用命名字段而无需计算位置索引,支持CSV、TSV、JSON等格式。
- Miller的语法不复杂,有专门的ReadTheDocs网站提供文档和示例。
- 需要设置-I标志以原地处理文件,设置输入格式为--itsv,输出格式为--otsv。
- 显式设置输出行分隔符为--ors '\r\n',使用put命令转换现有列的数据。
- 使用CFExecute时发现Miller需要在与文件相同的目录中进行原地处理。
- 使用临时Windows BAT文件执行Miller功能,处理速度极快(约400毫秒)。
- 这种方法比使用CF读取整个TSV文件更便携且性能更好。
延伸问答
Miller是什么工具,它的主要功能是什么?
Miller是一个用于处理以名称索引的数据的工具,类似于awk、sed、cut、join和sort,支持CSV、TSV和JSON等格式。
在使用Miller时,如何设置输入和输出格式?
使用Miller时,可以通过设置--itsv指定输入格式,设置--otsv指定输出格式。
为什么与东南部的RETS供应商合作时会出现邮政编码问题?
与东南部的RETS供应商合作时,偶尔会出现邮政编码值包含ZIP+4的问题,这在长期供应商那里从未出现过。
使用Miller进行数据处理的速度如何?
使用Miller进行数据处理的速度非常快,约为400毫秒。
如何在命令行中使用Miller进行原地处理?
在命令行中使用Miller进行原地处理时,需要设置-I标志,并确保在与文件相同的目录中执行。
Miller的语法复杂吗?
Miller的语法并不复杂,并且有专门的ReadTheDocs网站提供文档和示例。