我有这个 CSV 文件
ID,col1,col2,col3
1,,,FALSE
2,,,FALSE
3,,,FALSE
4,,,FALSE
我想使用 ID 列将其与另一个 CSV 文件结合起来
ID,col1
2,AA
3,BB
获取(真正的输出必须是另一个CSV,这里有一个漂亮的打印输出,以便更具可读性)
+----+------+------+-------+
| ID | col1 | col2 | col3 |
+----+------+------+-------+
| 1 | - | - | FALSE |
| 2 | AA | - | FALSE |
| 3 | BB | - | FALSE |
| 4 | - | - | FALSE |
+----+------+------+-------+
最后当col1
不为空时,col3
必须是TRUE
+----+------+------+-------+
| ID | col1 | col2 | col3 |
+----+------+------+-------+
| 1 | - | - | FALSE |
| 2 | AA | - | TRUE |
| 3 | BB | - | TRUE |
| 4 | - | - | FALSE |
+----+------+------+-------+
如何使用一些 Linux 命令行实用程序或 bash 脚本来做到这一点?
答案1
您可以使用米勒(https://github.com/johnkerl/miller)。跑步
mlr --csv join --ul -j ID -f input01.csv then put -S '!is_empty($col1) { $col3 = "TRUE" }' then sort -n ID input02.csv >output.csv
你将会拥有
+----+------+------+-------+
| ID | col1 | col2 | col3 |
+----+------+------+-------+
| 1 | - | - | FALSE |
| 2 | AA | - | TRUE |
| 3 | BB | - | TRUE |
| 4 | - | - | FALSE |
+----+------+------+-------+
一些注意事项:
join
使用ID
字段运行连接;put
检查 col1 是否不为空;sort
按 ID 对记录排序