【问题标题】:Find string in csv and add to each line在csv中查找字符串并添加到每一行
【发布时间】:2016-07-20 17:13:31
【问题描述】:

我有一个从 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 循环来附加第一个值,然后在它运行到包含“类”的下一行之后重复它冲洗并重复。不确定是否有更简单的方法。

【问题讨论】:

  • 我认为您所想的是将数据转换为所需/适当格式的唯一方法。您必须编写一个脚本,它将原始数据转换为所需的格式。
  • 源数据是 groupbreak 格式,您想将其转换为 csv 格式。逐行阅读。如果您找到“Class ..”,请记住它,但不要写入输出。下一行:只要找到 numberlist,将“Class”变量和 numberline 连接到一个新字符串并将其写入输出。如果你遇到一个新的“Class ..”并重复。

标签: php mysql bash csv unix


【解决方案1】:

使用 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    • 2019-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多