如何在bash中将csv文件中的列读入数组
我有一个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
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=';'代码>循环完成后死亡/丢弃。