php - 在 csv 中查找字符串并添加到每一行

标签 php mysql bash csv unix

我有一个从 API 获取的 csv 文件并想加载到 MySQL 表中,我不确定要搜索什么来处理文件的异常性质。

CSV 看起来像这样:

meta data
Class 1
1,2,3
5,9,7
Class 2
2,5,4
6,5,4
Class 3
8,4,3
7,8,8

我希望输出是我可以更轻松地加载的内容:

Class 1,1,2,3
Class 1,5,9,7
Class 2,2,5,4
Class 2,6,5,4
Class 3,8,4,3
Class 3,7,8,8

我习惯于 API 返回 json 并在 PHP 中循环遍历它以加载数据。这个 API 只有一个 csv 选项——类总是以相同的顺序出现,所以我想也许是一个 do until 循环来附加第一个值,然后在它运行到包含“Class”的下一行之后重复它冲洗并重复。不确定是否有更简单的方法。

最佳答案

使用 sed :

$ sed '/^Class/{h;d};/^Class/!{G;s/\(.*\)\n\(.*\)/\2,\1/g}' file.csv
Class 1,1,2,3
Class 1,5,9,7
Class 2,2,5,4
Class 2,6,5,4
Class 3,8,4,3
Class 3,7,8,8

使用 -i 选项就地编辑文件:

sed -i '/^Class/{h;d};/^Class/!{G;s/\(.*\)\n\(.*\)/\2,\1/g}' file.csv

关于php - 在 csv 中查找字符串并添加到每一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38486804/

相关文章:

php - 加快jquery ajax调用速度

PHP 和 htaccess 安全

linux - 将操作系统命令输出保留在一行中

linux - Bash Grep 来自 Youtube 的观看次数

php - 如何从 XML 文件中的 HTML 内容中删除命名空间

php - 根据该组的列更改该组的密码

php - 我需要特定产品类型的自定义选项卡,而不是所有产品类型

php - 无法发送内容类型 : text/xml header from PHP at the same time getting the data from MYSQL

php - 显示错误时间的网站总登录时间

linux - 显示.im6 : no decode delegate for this image format `/tmp/magick-KFcbfWUi'