将CSV值保存到shell中的变量中
我需要读取CSV文件的每一行,并将值保存到变量中 我的CSV文件的多行示例:将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}'`
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