读取包含多个字段的csv文件

时间:2015-04-11 14:57:33

标签: linux bash csv readfile

我想阅读带有.csv脚本的bash文件。该文件只有1行数据,但有很多字段。每个字段由分号;分隔。例如:

1;3;2;1;4;2;4;5;3;2;5;2;7;3;9;14;5

这里的问题是,如果我想使用相同的bash脚本来读取具有相同格式但具有不同字段数的另一个文件,该怎么办?例如:

1;3;2;1;4;2;4;5;3;2;5;2;7;3;9;14;5;12;3;2;15;4;10;2;5

最有效的方法是什么?

1 个答案:

答案 0 :(得分:1)

如果您的bash非常新,可以使用bash数组,就像这样

IFS=';' read -a array < file.csv

# Print entire array
echo ${array[@]}
1 3 2 1 4 2 4 5 3 2 5 2 7 3 9 14 5

# Print 7th element of array
echo ${array[7]}
5

或者,您可以通过将分号转换为换行符来将字段转换为行。这样,您想要的字段就是行号。

tr ';' '\n' < file.csv
1
3
2
1
4
2
4
5
3
2
5
2
7
3
9
14
5

所以,现在你可以这样做:

#!/bin/bash
field=1
while read x; do
   echo Field $field, value: $x
   ((field++))
done < <(tr ';' '\n' < file.csv)

<强>输出

Field 1, value: 1
Field 2, value: 3
Field 3, value: 2
Field 4, value: 1
Field 5, value: 4
Field 6, value: 2
Field 7, value: 4
Field 8, value: 5
Field 9, value: 3
Field 10, value: 2
Field 11, value: 5
Field 12, value: 2
Field 13, value: 7
Field 14, value: 3
Field 15, value: 9
Field 16, value: 14
Field 17, value: 5