【发布时间】:2012-09-06 08:16:16
【问题描述】:
我有一个文件,其中每一行都是逗号分隔值的列表。例如,
1, a, b, c, d, e 2、x、y、z
现在我想将其转换为bash,如下所示:
1个 1个 1摄氏度 1天 1e 2× 2年 2z
如何使用shell (bash) 脚本做到这一点?
【问题讨论】:
我有一个文件,其中每一行都是逗号分隔值的列表。例如,
1, a, b, c, d, e 2、x、y、z
现在我想将其转换为bash,如下所示:
1个 1个 1摄氏度 1天 1e 2× 2年 2z
如何使用shell (bash) 脚本做到这一点?
【问题讨论】:
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,依此类推。可能是这样的:
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
【讨论】:
我知道您需要一个 shell 脚本,但它必须是 bash 吗?例如我通常会使用更高级别的脚本语言和 CSV 库。例如Perl 和 Text::CSV
【讨论】:
text/csv mime 类型的 RFC-4180 声明“每一行应该在整个文件中包含相同数量的字段"(应明确列出空字段,如:a,b,,,);某些库在解析 CSV 输入时可能会施加此先决条件。