将CSV值保存到shell中的变量中

将CSV值保存到shell中的变量中,shell,csv,awk,sh,Shell,Csv,Awk,Sh,我需要读取CSV文件的每一行,并将值保存到变量中 我的CSV文件的多行示例: value1;value2;value3 value4;value5;value6 我有这个: for enreg in `cat ../files/inputs/file.csv` do INFO1= `echo $enreg | awk -F ';' '{ print $1}'` INFO2= `echo $enreg | awk -F ';' '{ print $2}'`

我需要读取CSV文件的每一行,并将值保存到变量中

我的CSV文件的多行示例:

 value1;value2;value3
 value4;value5;value6
我有这个:

 for enreg in `cat ../files/inputs/file.csv`
   do
     INFO1= `echo $enreg | awk -F ';' '{ print $1}'`
     INFO2= `echo $enreg | awk -F ';' '{ print $2}'`
     INFO3= `echo $enreg | awk -F ';' '{ print $2}'`
     echo "INFO1= $INFO1"
     echo "INFO2= $INFO2"
     echo "INFO3= $INFO3"
     echo "$INFO3;$INFO2;$INFO1" >> ../files/output/files.csv
  done
我在控制台中有以下结果:

 INFO1= value1
 value4
 INFO2= value2
 value5
 INFO3= value3
 value6
但我需要在第二个CSV文件中写入以下内容:

 INFO1= value1
 INFO2= value2
 INFO3= value3
 INFO1= value4
 INFO2= value5
 INFO3= value6
谢谢你的帮助,祝你度过愉快的一天

\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu强

更新

我的CSVmatricule.csv是:

value1;value2;value3 
value4;value5;value6 
我的CSVmatricule.ks是:

while IFS=";" read -r f1 f2 f3 
  do 
    echo "INFO1=$f1" 
    echo "INFO2=$f2" 
    echo "INFO3=$f3"
  done < ../files/inputs/CSVmatricule.csv 
cat-vet../files/inputs/CSVmatricule.csv的结果:

value1;value2;value3$
value4;value5;value6

为什么CSV的第二行没有计数??

使用
awk
命令如何

$ awk -F";" '{for (i=1;i<=NF;i++) printf "INFO%d=%s\n", i, $i}' file
INFO1=value1
INFO2=value2
INFO3=value3
INFO1=value4
INFO2=value5
INFO3=value6
这是一种按顺序循环文件的方法,而不是针对。。。在cat…中。这样,
while
中的每个循环都读取一行。此外,通过为
read
提供多个参数,每个
-将分隔字段分配给相应的变量。第一个到
$f1
,第二个到
$f2
,其余到
$f3



如果需要将这些值存储为变量,只需说:
source您可以设置
IFS
变量,以便
read
命令在“;”上拆分:

export IFS=";"
cat ../files/inputs/file.csv | while read INFO1 INFO2 INFO3
 do
   echo "INFO1= $INFO1"
   echo "INFO2= $INFO2"
   echo "INFO3= $INFO3"
   echo "$INFO3;$INFO2;$INFO1" >> ../files/output/files.csv
done

你好,fedorqui和ty,谢谢你的回复。第一个解决方案非常有效,但第二个解决方案的结果是INFO1=value1 INFO2=value2 INFO3=value3,但第二行不起作用。@Florian_L对我有效:如果在IFS=“;”读取f1 f2 f3时说
,会得到什么;执行echo“INFO1=$f1”;回显“INFO2=$f2”;echo“INFO3=$f3”;完成
?我得到:
INFO1=value1 INFO2=value2 INFO3=value3
@Florian\L我不能再说了。也许你的文件包含奇怪的字符?使用
cat-vet文件检查。就你展示的文件而言,它对我有效。@Florian_L你说的“第二行不起作用”是什么意思?您的意思是写入输出/files.csv?这正是我的解决方案所做的,我说
而IFS=“;”…
感谢您的回复,robert,但与fedorqui解决方案相同,控制台上只打印
INFO1=value1 INFO2=value2 INFO3=value3
我需要读取CSV文件的每一行并将值保存到变量中。
-这是极不可能的。这很可能是XY问题的一个示例,请参阅。如果你告诉我们你想做什么,我们可以告诉你如何解决你的问题,而不是告诉你如何实施这个几乎肯定是错误的解决方案。
while IFS=";" read -r f1 f2 f3
do
  echo "INFO1=$f1"
  echo "INFO2=$f2"
  echo "INFO3=$f3"
done < file
export IFS=";"
cat ../files/inputs/file.csv | while read INFO1 INFO2 INFO3
 do
   echo "INFO1= $INFO1"
   echo "INFO2= $INFO2"
   echo "INFO3= $INFO3"
   echo "$INFO3;$INFO2;$INFO1" >> ../files/output/files.csv
done