下面是一个 bash shell 脚本,用于接收 csv 文件并吐出按我想要的方式格式化的行(还有一些更改,但我只保留了影响下面显示的数组)。
FILENAME=$1
cat $FILENAME | while read LINE
do
OIFS=$IFS;
IFS=","
columns=( $LINE )
date=${columns[4]//\"/}
columns[13]=${columns[13]//\"/}
columns[4]=$(date -d $date +%s)
newline=${columns[*]}
echo $newline
IFS=$OIFS;
done
我正在为 CentOS 6.3 使用 GNU bash v 4.1.2(1)-release。我试过把引号像
newline="${columns[*]}"
仍然没有运气。
以下是样本数据线
112110120001299169,112110119001295978,11,"121.119.163.146.1322221980963094","2012/11/01"
似乎应该将数组输出为逗号分隔的字符串。相反,字符串是用空格分隔的。有谁知道原因吗?
我怀疑这与以下事实有关:如果我在脚本中回显 $IFS 它是一个空字符串,但是当我回显 "${IFS}" 时,它就是我期望的逗号。
编辑:解决方案
我找到了解决方案。当回显 $newline 时,我必须在它周围使用引号,即
echo "$newline"
否则,它将使用默认空白。我相信它与bash有关,当你用引号强制它时,它只代替IFS。