我有一个包含以下内容的文件:
列表:
blue,none
red,none
orange,plot
baseball , none
university,none
school,none
desk,plot
monitor,none
earphone,none
我需要读取这个文件,删除空格并将每列存储在不同的数组中。
脚本:
output_names=()
output_plots=()
while read line
do
item=$(echo -e "${line}" | tr -d '[[:space:]]')
item=$(echo $item | tr "," "\n")
output_names+=(${item[0]});
output_plots+=(${item[1]});
done <list
echo "** output_names:";
for item in ${output_names[*]}
do
echo $item
done
echo "** output_plots:";
for item in ${output_plots[*]}
do
echo $item
done
然而它并没有像我预期的那样工作。怎么了?以及如何修复此代码?
笔记
如果有人有一个解决方案将数据存储在具有不同键output['names'][*]
和的单个数组中output['plots'][*]
,那么我将非常感激,因为我不知道该怎么做。
输出:
** output_names:
blue
none
red
none
orange
plot
baseball
none
university
none
school
none
desk
plot
monitor
none
earphone
none
** output_plots:
答案1
您的代码的问题是命令以及您对和tr
的(错误)假设。item[0]
item[1]
当然有多种方法可以解决这个问题;这是一种方法(靠近你的方法):
while IFS=, read left right
do
output_names+=( "${left// }" )
output_plots+=( "${right// }" )
done <list
(我只描述了循环更改,其余代码可以保持原样。)
答案2
这将返回一个带有空格的字符串:
item=$(echo $item | tr "," "\n")
像这样改变它以获得一个数组:
item=($(echo $item | tr "," "\n"))
输出:
** output_names:
blue
red
orange
baseball
university
school
desk
monitor
earphone
** output_plots:
none
none
plot
none
none
none
plot
none
none
可能有更好的方法来完成你的艰巨任务