读取文件删除空格并存储在数组中

读取文件删除空格并存储在数组中

我有一个包含以下内容的文件:

列表:

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

可能有更好的方法来完成你的艰巨任务

相关内容