忽略发送到csv文件的bash变量中的逗号

时间:2019-04-02 19:38:53

标签: bash csv

我无法忽略bash变量中的逗号,以使csv文件不会将变量分成不同的列。如果变量是“ TACGTAT,TACG”,我希望将其作为单个列而不是两个不同的列。

这是我的完整剧本:

for filename in "$1"/*.vcf; do
  bcftools query -f '%POS %REF %ALT\n' "$filename" > temp_reads.txt
  echo "Sick Read!: "$(cat temp_reads.txt)""
  echo ""$(basename "$filename")","$(cat temp_reads.txt)"" >> output.csv
done

我特别希望将“ $(cat temp_reads.txt)”扩展中的所有内容作为单个列包含在csv文件中,以防万一。

谢谢!

2 个答案:

答案 0 :(得分:1)

无论如何,完全不需要整理临时文件。

for filename in "$1"/*.vcf; do
  bcftools query -f '%POS %REF %ALT\n' "$filename" |
  sed "s/^/$(basename "$filename"),/"
done >output.csv

一般来说,您不能嵌套双引号:""foo只是一个无引号的foo,其左侧带有一个带引号的空字符串(当然,在shell解析完此表达式时,该字符串会完全消失)。

还要注意在done之后移动重定向如何提高可读性和效率。因为您仅重定向一次,所以您可以写而不是追加(当然,假设您不需要出于其他原因进行追加),并且每次打开时都不会打开,查找到文件末尾,进行写入和关闭循环,这样就节省了I / O开销。

答案 1 :(得分:0)

测试数据:

echo 'a,b and "c".' > temp_reads.txt
filename="What a lovely name"

不正确的解决方案,忽略文件中的双引号

printf '"%s","%s"\n' "${filename}" "$(cat temp_reads.txt)"

使用文件中的第二个双引号将每个双引号转义

sed 's/"/""/g' temp_reads.txt

组合

printf '"%s","%s"\n' "${filename}" "$(sed 's/"/""/g' temp_reads.txt)"