如何在 bash 中将 csv 文件中的列读入数组

Gol*_*den 6 csv bash

我有一个如下所示的 csv 文件

NameColumn1;NameColumn2;NameColumn3;NameColumn4
Row1;Row1;Row1;Row1;
Row2;Row2;Row2;Row2;
Row3;Row3;Row3;Row3;
Run Code Online (Sandbox Code Playgroud)

我想从NameColumn1中取出Row1,Row2和Row3中的值并将它们放入数组中,对于NameColumn2,NameColumn3和NameColumn4也是如此。

我不知道有多少行,但我知道列数。有什么帮助吗?

谢谢。

Jet*_*sel 8

使用-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[@]}"
Run Code Online (Sandbox Code Playgroud)
  • 只需记住数组的索引从零开始计数。
  • 此解决方案的唯一优点是您不需要变量来分配每个字段。


Sai*_*Hax 5

假设你有四列

 while read a b c d; do 
   ar1+=($a)
   ar2+=($b)
   ar3+=($c)
   ar4+=($d)
done < <(sed 's/;/\t/g' somefile.txt)
Run Code Online (Sandbox Code Playgroud)

然后,您将拥有名为 ar1 到 ar4 的 4x 数组,其中包含列值。