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

Read csv file with multiple fields

我想用 bash 脚本读取 .csv 文件。该文件只有 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

最有效的方法是什么?

如果您的 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