我无法忽略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文件中,以防万一。
谢谢!
答案 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)"