将脚本数组压缩到csv

时间:2014-01-20 14:38:29

标签: arrays bash shell csv

我想从我的数组中用逗号分隔字符串。在我的脚本中,我收集数据到数组outputArr,然后我想echo它来检查它,但现在我卡住了。我想使用以下方法在控制台上打印:

echo ${outputArr[*]}

但我输错了。所以我正在尝试调试它并像这样写:

echo ${outputArr[0]}
echo ${outputArr[1]}
echo ${outputArr[*]}
echo "-------------"

好的,这是我的输出:

Terminally Yours
2204
 2204nally Yours
-------------

和其他例子:

Alfa
1491
 1491
-------------

为什么在开始时会被空间覆盖?当然,我的目标是(最后):

Alfa;1491

在这一点上:

Alfa1491

修改

while read -r line
do
    singleLine=$line
    if [[ $singleLine =~ $regexVenueName ]]
    then
        singleLine=${singleLine/<span id=\"ctl00_MainContent_lbPartner\" class=\"Partner\">/}
        singleLine=${singleLine/<\/span> <br \/><br \/>/}
        partnerVenueNameOutput+="$singleLine"
        outputArr[0]=$singleLine
    fi
done < "$f"

2 个答案:

答案 0 :(得分:4)

您的数组包含带回车符的元素:

$ foo=($'\rterminally yours' $'\r2204')
$ echo "${foo[0]}"
terminally yours
$ echo "${foo[1]}"
2204
$ echo "${foo[*]}"
2204inally yours 

对于您的代码,您可以添加以下内容以从变量中删除回车符:

singleLine=${singleLine//$'\r'/}

答案 1 :(得分:2)

要从每个数组元素中删除任何尾随回车符,请尝试

outputArray=( "${outputArray[@]%$'\r'}" )

但是,最好先检查outputArray的设置方式,并防止首先添加回车符。如果您正在读取使用DOS行结尾的文件,请首先使用dos2unix“清除”它。