Answers:
while IFS=, read xx yy zz;do
echo $xx $yy $zz
done < input_file
如果字段数恒定,这应该可以工作。而不是echo
使用您的命令。
您应该使用while
与read
内置:
while IFS= read -r line;do
fields=($(printf "%s" "$line"|cut -d',' --output-delimiter=' ' -f1-))
command "${fields[1]}" -x "${fields[2]}" ... # ${fields[1]} is field 2
done < your_file_here
如何运作
cut
语句采用该行并将其在由指定的定界符上分割-d
。--output-delimiter
是,分隔符cut
将用于显示所选字段,这里我们选择的空间,所以我们可以把不同领域到数组fields
。-f1-
都在起作用。fields
,您可以访问任何你想要的特定领域的语法${field[number]}
,其中number
一个比你少,因为数组索引所需的实际场数是从零开始的猛砸。注意
对于恒定数量的字段
您可以改为执行类似于1_CR的答案:
while IFS= read -r line;do
IFS=, read -r field1 field2 field3 <<-EOI
$line
EOI
command "$field2" -x "$field3" ...
done < your_file_here
上面的代码看起来比较吵杂,但它可以在任何POSIX兼容的shell中运行,而不仅仅是Bash。
IFS
在read
调用中设置适当的值来避免使用外部工具进行拆分