bash - BASH循环从其他csv更改1个csv的数据
问题描述
试图根据其他csv中的其他列更改列的值
所以假设我们有一个 CSV_1,它包含超过 1000 行和 3 列的状态
shape Color size
round 2 big
triangle 1 small
square 3 medium
然后我们有一个只有 10 个的 CSV2,其中包含以下信息
color
1 REd
2 Blue
3 Yellow
etc
现在我想用 CSV2 的颜色名称更改 CSV_1 中列颜色的值
所以换句话说..像
for (i=0; i<column.color(csv1); i++) {
if color.csv1=1; then
subustite with color.csv2=1 }
以便循环在所有 CSV1 颜色列中迭代并使用 CSV2 中的值更改值
解决方案
对此的显式循环在 bash 中会非常慢。使用为您执行逐行处理的命令。
sed 's/abc/xyz/'
在每一行中搜索abc
并将其替换为xyz
. 使用它来搜索第二列中的数字并将其替换为第二个文件中的名称。该sed
命令可以使用另一个sed
命令从第二个文件自动生成:
以下脚本假定 CSV 文件在分隔符周围没有空格,
。
sed -E "$(sed -E '1d;s#^([^,]*),(.*)#s/^([^,]*,)\1,/\\1\2,/#' 2.csv)" 1.csv
交互式示例
$ cat 1.csv
shape,Color,size
round,2,big
triangle,1,small
square,3,medium
$ cat 2.csv
color
1,REd
2,Blue
3,Yellow
$ sed -E "$(sed -E '1d;s#^([^,]*),(.*)#s/^([^,]*,)\1,/\\1\2,/#' 2.csv)" 1.csv
shape,Color,size
round,Blue,big
triangle,REd,small
square,Yellow,medium
推荐阅读
- python - Django(DRF)无法将数据发布到具有相似路径的 url
- javascript - 在 vue.js 中绑定时如何有效地显示文本而不是 null?
- c# - 如何从 WebApi 获取调用 API 的 Http Header
- jira - Jira 提供了哪些开箱即用的图表(没有任何插件)?
- apache - 知道如何在调用 Drupal 7 路由时加载 Drupal 8 路由吗?
- mysql - 恢复 MySQL 数据
- java - Spring Data 在条目尚不存在时插入数据
- ios - 无法为多个单词提供单独的颜色
- ios - 如何上传带有 Alamofire 内部参数的图像
- laravel - 如何将数据选项卡分开导出