csv - CSV 在 4 行中转换一行
问题描述
我有具有这种结构的更多行的 csv 文件:
+----+----+-------+------------+---------------------+--+
| ID | 1 | 2 | 3 | 4 | |
+----+----+-------+------------+---------------------+--+
| 5 | 12 | 500ML | 0000-00-00 | AIAB,LAV,NCCT,QC,QV | |
+----+----+-------+------------+---------------------+--+
| 6 | 6 | 5ML | 0000-00-00 | QV,LAV,QC,AIAB,NCCT | |
+----+----+-------+------------+---------------------+--+
我的目标是通过所有线路实现这一目标
+---+---+---------------------+
| 1 | 5 | 12 |
+---+---+---------------------+
| 2 | 5 | 500ML |
+---+---+---------------------+
| 3 | 5 | 0000-00-00 |
+---+---+---------------------+
| 4 | 5 | AIAB,LAV,NCCT,QC,QV |
+---+---+---------------------+
| 1 | 6 | 6 |
+---+---+---------------------+
| 2 | 6 | 5ML |
+---+---+---------------------+
| 3 | 6 | 0000-00-00 |
+---+---+---------------------+
| 4 | 6 | AIAB,LAV,NCCT,QC,QV |
+---+---+---------------------+
有什么建议吗?
解决方案
使用 Miller ( https://github.com/johnkerl/miller ) 并从
ID,1,2,3,4
5,12,500ML,00000000,"AIAB,LAV,NCCT,QC,QV"
6,6,5ML,00000000,"QV,LAV,QC,AIAB,NCCT"
并运行
mlr --csv --headerless-csv-output reshape -r "[0-9]" -o item,value then reorder -f item,ID,value input.csv
你将会有
1,5,12
2,5,500ML
3,5,00000000
4,5,"AIAB,LAV,NCCT,QC,QV"
1,6,6
2,6,5ML
3,6,00000000
4,6,"QV,LAV,QC,AIAB,NCCT"
漂亮的打印输出
+------+----+---------------------+
| 1 | 5 | 12 |
| 2 | 5 | 500ML |
| 3 | 5 | 00000000 |
| 4 | 5 | AIAB,LAV,NCCT,QC,QV |
| 1 | 6 | 6 |
| 2 | 6 | 5ML |
| 3 | 6 | 00000000 |
| 4 | 6 | QV,LAV,QC,AIAB,NCCT |
+------+----+---------------------+
推荐阅读
- python - 安装和运行 Tensorflow 时出现 ValueError
- spring-boot - 带有 ConfigurationProperties 的 Spring Boot CORS 配置
- oracle - 如何在 PL/SQL 中将 NVL 用于日期列?
- javascript - 在 angularJS 中的图像 HTML、CSS 上重叠文本区域或文本
- kubernetes - 如何在气隙系统上安装 Helm 3 Chart
- algorithm - 最大平衡二叉树
- hibernate - 信息:HHH000318:在类路径中找不到任何 META-INF/persistence.xml 文件,尽管文件存在
- git - 如何将 git 重置回我推送的内容
- node.js - GitLab CI 错误作业失败(系统故障)
- javascript - 如何验证或检查提示值是否在对象中