如何使用while读取行读取多个变量?我试图从这些多行的变量创建一个csv文件。
不确定这是否是最好的方法。
例如:
1st_list=$(..code..)
2nd_list=$(..code..)
while read line_from_1, line_from_2
do
echo "$line_from_1,$line_from_2" >> outputfile.csv
done < $1st_list,$2nd_list
答案 0 :(得分:4)
你的问题有点不清楚,但为了从多个源并行读取,你需要使用多个文件描述符,我认为是进程替换。
while read line_from_1;
read -u 3 line_from_2; do
echo "From first: $line_from_1"
echo "From second: $line_from_2"
done < <( echo "$first_list" ) 3< <(echo "$second_list")
(当然,如果它们不存在,则不必使用这两个变量;只需将填充每个变量的代码放在为while
循环提供的适当进程替换中:
done < <( ...code for first list...) 3< <(...code for second list...)
)
如上所述,只要 second 读取成功(第一次读取的退出状态被忽略),循环就会成功。要成功循环,请使用read line_from_1 && read -u 3 line_from_2
。
只要 成功,要循环播放,您需要一个稍微复杂的迷你脚本作为while
条件:
while read line_from_1; read1=$?;
read line_from_2; read2=$?;
(( read1 == 0 || read2 == 0 )); do
更新:如果已经设置了变量来代替过程替换,您也可以简单地使用此处的字符串。 (我不确定3<<<
是否合法。)
while read line_from_1; read -u 3 line_from_2; do
...
done <<< "$first_line" 3<<< "$second_line"
答案 1 :(得分:2)
假设您想要输出
file1line1,file2line1
file2line2,file2line2
etc.
然后你根本不需要这样的东西,因为paste
就是这样。
paste -d, <(echo "$first_list") <(echo "$second_list")