使用ColdFusion和Miller转换TSV数据(命令行大显身手!)
💡
原文英文,约500词,阅读约需2分钟。
📝
内容提要
我们从多个供应商获得数据许可,并发现即使是相同规范的数据也不能一视同仁。例如,我们与两个不同的房地产交易标准(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文件更便携且性能更好。
🏷️
标签
➡️