我想阅读带有.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
最有效的方法是什么?
答案 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