arrays - 将csv转换为不同的格式

标签 arrays bash csv

使用 BASH,我需要将从数据源收到的 csv 输出转换为不同的格式,以便更轻松地导入到 SQL Server 中。

源格式是一行,其中有一个数据点,然后是逗号,然后是由冒号分隔的任意数量的主机。

目标格式是一个数据点,然后是逗号,然后是一行上的主机之一。然后下一行将是相同的数据点,然后是逗号,然后是下一个主机。

基本上,我需要从每个数据点 1 行和许多冒号分隔的主机更改为每个数据点多行,每行只有一个主机

源格式:

data1,host1:host2
data2,host4:host5:host6
data3,host4:host7:host1:host5:host9

我需要

data1,host1
data1,host2
data2,host4
date2,host5
data2,host6
data3,host4
data3,host7
data3,host1
data3,host5
data3,host9

最佳答案

由于格式类似于

field1,subfield1:subfield2:...

并且必须成为

field1,subfield1
field1,subfield2
field1,...

我会用...

awk 'BEGIN {FS=OFS=","}
     {n=split($2,a,":")
      for (i=1; i<=n; i++) print $1, a[i]}' file

这将字段分隔符设置为逗号。然后,它会分解冒号上的第二个字段。由于 split 返回片段数,因此只需循环提取的值即可。

测试

$ awk 'BEGIN {FS=OFS=","} {n=split($2,a,":"); for (i=1; i<=n; i++) print $1, a[i]}' a
data1,host1
data1,host2
data2,host4
data2,host5
data2,host6
data3,host4
data3,host7
data3,host1
data3,host5
data3,host9

关于arrays - 将csv转换为不同的格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29777694/

相关文章:

php - 更新多个 SQL 行

linux - 在 bash 中存储命令输出 "Here Document"

linux - 使用 heredoc 输入时 Bash 返回码错误处理

android - 将信息(文本或csv)添加到android中的图像

python - Python .csv 文件中字段的 boolean 值

python - 如何在python中检查上传的文件是csv还是xls?

arrays - 如何从数据构造一个n维数组

c++ - 数组内注释中的双反斜杠

javascript - 计算对象数组中的特定数据

bash - 拆分并推送提交的文件到两个不同的分支