Bash:对于循环并将每个输出另存为 csv 中的新列



我有一个混合文件类型的文件夹。bam,本。Bai和。log)。我创建了一个for循环,在每个.bam文件上执行两个命令。我当前的代码将每个命令的输出直接放到单独的csv文件中,因为我不知道如何将输出直接放到单独的列中。

TYIA !

问题1
我想将命令的输出导出到相同的csv文件中。如何修改代码,使第一个命令的输出保存为csv文件的第一列,第二个命令的输出保存为同一csv文件的第二列?

问题2
在for循环中选择文件的语法名称是什么?例如,* in *。Bam代表一个通配符。这是正则表达式吗?我有一个艰难的时间试图改变这一点,只有*。Bam文件被选择用于for循环(和. Bam)。白族除外)。我最后得到了*[。通过猜测和实证测试我的输出。有没有网站很好地解释了这种语法,并提供了很多例子(程序员级别:新手)

<<p>当前代码/strong>
> ~/Desktop/Sample_Names.csv
> ~/Desktop/Read_Counts.csv
echo "Sample" | cat - > ~/Desktop/Sample_Names.csv
echo "Total_Reads" | cat - > ~/Desktop/Read_Counts.csv
for file in *[.bam]
do
samtools view -c $file >> ~/Desktop/Read_Counts.csv
gawk -v RS="^$" '{print FILENAME}' $file >> ~/Desktop/Sample_Names.csv
done

当前输出(截断)

>Sample_Names.csv
| Sample       |
|--------------|
| B40-JV01.bam |
| B40-JV02.bam |
| B40-JV03.bam |
>Read_Counts.csv
| Total_Reads |
|-------------|
| 3835555     |
| 4110463     |
| 144558      |

期望输出值

>Combined_Outputs.csv
| Sample       | Total_Reads |
|--------------|-------------|
| B40-JV01.bam | 3835555     |
| B40-JV02.bam | 4110463     |
| B40-JV03.bam | 144558      |

类似

echo "Sample,Total_Reads" > Combined_Outputs.csv
for file in *.bam; do
printf "%s,%sn" "$file" "$(samtools view -c "$file")"
done >> Combined_Outputs.csv

为每个文件打印一行,并将输出重定向移出循环以提高效率。

最新更新