我有一个看起来像这样的csv文件
NameColumn1;NameColumn2;NameColumn3;NameColumn4
Row1;Row1;Row1;Row1;
Row2;Row2;Row2;Row2;
Row3;Row3;Row3;Row3;
我想从NameColumn1获取Row1,Row2和Row3中的值并将它们放入数组中,对于NameColumn2,NameColumn3和NameColumn4也是如此。
我不知道我会有多少行,但我知道列的数量。 有什么帮助吗?
谢谢。
答案 0 :(得分:2)
假设你有四列
while read a b c d; do
ar1+=($a)
ar2+=($b)
ar3+=($c)
ar4+=($d)
done < <(sed 's/;/\t/g' somefile.txt)
然后你有4x数组,名为ar1到ar4,其中包含列值。
答案 1 :(得分:0)
使用SaintHax答案并进行调整;这适用于我的应用程序和类似格式的数据。请注意,在存储的var上添加了引号,并在重定向的文件上删除了sed命令。
OLDIFS=$IFS # save original IFS setting
IFS=';'
while read -r a b c d; do
ar1+=("$a")
ar2+=("$b")
ar3+=("$c")
ar4+=("$d")
done < somefile.txt
IFS=$OLDIFS # restore orig setting
答案 2 :(得分:0)
使用内置-a
中的read
选项/标志。
#!/usr/bin/env bash
while IFS=';' read -ra array; do
ar1+=("${array[0]}")
ar2+=("${array[1]}")
ar3+=("${array[2]}")
ar4+=("${array[3]}")
done < file.csv
printf '%s\n' "${ar1[@]}" "${ar2[@]}" "${ar3[@]}" "${ar4[@]}"