如何在bash中转换CSV文件?

时间:2012-09-13 09:07:55

标签: bash shell csv

我有一个文件,每行都是逗号分隔值的列表。例如,

1, a, b, c, d, e
2, x, y, z

现在我想将其转换为bash,如下所示:

1 a
1 b
1 c
1 d
1 e
2 x
2 y
2 z

如何使用shell (bash)脚本执行此操作?

3 个答案:

答案 0 :(得分:7)

awk -F, '{for(i=2;i<=NF;i++)print $1,$i}' temp

测试如下:

> cat temp
1, a, b, c, d, e
2, x, y, z
> awk -F, '{for(i=2;i<=NF;i++)print $1,$i}' temp
1  a
1  b
1  c
1  d
1  e
2  x
2  y
2  z

答案 1 :(得分:2)

您可以将线条拆分为标记并将其放入数组中。数组的第一个元素将是数字,在您的情况下它是1或2,依此类推。这样的事情可能是:

while read line
do
    arrIN=(${line//,/ })

## make a loop and echo them
## arrIN[0] will have the initial number

done < $file

# $file is the input file you are reading

答案 2 :(得分:1)

我知道你需要一个shell脚本,但它需要是bash吗?例如我通常会使用更高级别的脚本语言和CSV库。例如PerlText::CSV