带有换行符的Bash变量在CSV文件中无法正确表示

时间:2019-05-24 04:14:09

标签: bash shell csv

我正在尝试将linux命令的文本输出粘贴到csv文件的单个单元格中。无论我如何尝试对引号进行转义,csv文件似乎都没有注册换行符。

例如,如果以下命令之一的输出是:

155 C T
2518 T C

它在csv单元中的打印方式为:

155 C T 2518 T C
for filename in "$1"/*JGI*.vcf; do
    counter=$((counter + 1))

    depth_score="$(samtools depth "${filename%.*}.bam" | python depth.py)"
    variant_array="$(bcftools query -f '%POS %REF %ALT\n' "$filename")"
    column_name="$(basename "$filename")"

    echo "$counter/$total_colonies" # echo current/total
    echo "$variant_array"
    echo ""$variant_array""
    echo "$column_name, "$variant_array", $depth_score" >> output.csv
done

这是for循环,给了我一些错误。

$variant_array的结果就是问题所在。

我上面有两个打印日志,我在这些日志中写入output.csv以查看发生了什么情况。

"$variant_array"产生了预期的行为,但是由于某些原因,当我在另一组引号中回显该问题并将其写入csv文件时,它会忽略换行符...

2 个答案:

答案 0 :(得分:2)

行情不会以这种方式逃脱...那么以下内容对您有用吗?

echo '"'"$variant_array"'"'
echo "$column_name", '"'"$variant_array"'"', "$depth_score" >> output.csv

这是转义引号的另一种形式:

echo \""$variant_array"\"
echo "$column_name", \""$variant_array"\", "$depth_score" >> output.csv

这是另一个想法:

echo "\"$variant_array\""
echo "$column_name, \"$variant_array\", $depth_score" >> output.csv

答案 1 :(得分:0)

问题在于$variant_array在另一组引号中不是。完全没有报价。

替换:

echo "$column_name, "$variant_array", $depth_score" >> output.csv

具有:

echo "$column_name", "$variant_array", "$depth_score" >> output.csv

或更简单的是:

echo "$column_name, $variant_array, $depth_score" >> output.csv