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

如何在bash中将csv文件中的列读入数组,bash,csv,Bash,Csv,我有一个csv文件,看起来像这样 NameColumn1;NameColumn2;NameColumn3;NameColumn4 Row1;Row1;Row1;Row1; Row2;Row2;Row2;Row2; Row3;Row3;Row3;Row3; 我想从NameColumn1中获取行1、行2和行3中的值,并将它们放入数组中,NameColumn2、NameColumn3和NameColumn4也是如此 我不知道我将有多少行,但我知道列的数量。 有什么帮助吗 谢谢。假设您有四列 whi

我有一个csv文件,看起来像这样

NameColumn1;NameColumn2;NameColumn3;NameColumn4
Row1;Row1;Row1;Row1;
Row2;Row2;Row2;Row2;
Row3;Row3;Row3;Row3;
我想从NameColumn1中获取行1、行2和行3中的值,并将它们放入数组中,NameColumn2、NameColumn3和NameColumn4也是如此

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


谢谢。

假设您有四列

 while read a b c d; do 
   ar1+=($a)
   ar2+=($b)
   ar3+=($c)
   ar4+=($d)
done < <(sed 's/;/\t/g' somefile.txt)
在读取b c d时;做
ar1+=($a)
ar2+=(亿美元)
ar3+=($c)
ar4+=(d美元)

完成<假设您有四列

 while read a b c d; do 
   ar1+=($a)
   ar2+=($b)
   ar3+=($c)
   ar4+=($d)
done < <(sed 's/;/\t/g' somefile.txt)
在读取b c d时;做
ar1+=($a)
ar2+=(亿美元)
ar3+=($c)
ar4+=(d美元)

使用SaintHax答案和微调完成;这适用于我的应用程序和类似格式的数据。请注意,在存储的变量上添加了引号,并删除了重定向文件上的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
OLDIFS=$IFS#保存原始IFS设置
如果s=';'
而read-ra-b-c-d;做
ar1+=(“$a”)
ar2+=(“$b”)
ar3+=(“$c”)
ar4+=(“$d”)
完成
使用SaintHax答案和调整;这适用于我的应用程序和类似格式的数据。请注意,在存储的变量上添加了引号,并删除了重定向文件上的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
OLDIFS=$IFS#保存原始IFS设置
如果s=';'
而read-ra-b-c-d;做
ar1+=(“$a”)
ar2+=(“$b”)
ar3+=(“$c”)
ar4+=(“$d”)
完成
使用内置
读取的
-a
选项/标志

#/usr/bin/env bash
而IFS=';'read-ra阵列;做
ar1+=(“${array[0]}”)
ar2+=(“${array[1]}”)
ar3+=(“${array[2]}”)
ar4+=(“${array[3]}”)
完成
  • 只需要记住数组的索引从零开始计数
  • 此解决方案的唯一优点是不需要变量来分配每个字段

使用内置
读取的
-a
选项/标志

#/usr/bin/env bash
而IFS=';'read-ra阵列;做
ar1+=(“${array[0]}”)
ar2+=(“${array[1]}”)
ar3+=(“${array[2]}”)
ar4+=(“${array[3]}”)
完成
  • 只需要记住数组的索引从零开始计数
  • 此解决方案的唯一优点是不需要变量来分配每个字段

Golden-看看:我是初学者,所以我不太懂。。。。帮助。金-看看:我是初学者,所以我不太懂。。。。help.@DavidC.Rankin我认为这不起作用,
-d
使
读取
在遇到分隔符时停止。我认为它必须是
IFS=';'@BenjaminW。没有-d,它是4个变量,分别命名为a、b、c和d。它是有效的,我在发布它之前在一个文件上运行了它。@SaintHax绝对-我对David的评论发表了评论,现在,它已经不存在了-它包含了使用sed和
read-d
,但它不起作用,我指出了这一点。@DavidC.Rankin但我100%支持纯Bash解决方案;)@我认为这不起作用,
-d
使
读取
遇到分隔符时停止。我认为它必须是
IFS=';'@BenjaminW。没有-d,它是4个变量,分别命名为a、b、c和d。它是有效的,我在发布它之前在一个文件上运行了它。@SaintHax绝对-我对David的评论发表了评论,现在,它已经不存在了-它包含了使用sed和
read-d
,但它不起作用,我指出了这一点。@DavidC.Rankin但我100%支持纯Bash解决方案;)<代码>当IFS=';'阅读..
由于
IFS=';'在循环完成后死亡/丢弃。
而IFS=';'阅读..
由于
IFS=';'循环完成后死亡/丢弃。