【发布时间】:2022-06-16 21:23:19
【问题描述】:
我有一个文件夹,其中包含多种文件类型(.bam、.bam.bai 和 .log)。我创建了一个 for 循环来对每个 .bam 文件执行两个命令。我当前的代码将每个命令的输出定向到单独的 csv 文件中,因为我无法弄清楚如何将输出定向到单独的列。
TYIA!
问题 1
我想将命令的输出导出到相同的 csv 中。如何更改我的代码,以便我的第一个命令的输出保存为 csv 的第一列,而我的第二个命令的输出保存为同一 csv 的第二列。
问题 2
用于在 for 循环中选择文件的语法名称是什么?例如,*.bam 中的 * 代表通配符。这是正则表达式吗?我很难改变它,以便只为 for 循环选择 *.bam 文件(并且 .bam.bai 被排除在外)。通过猜测和经验测试我的输出,我最终得到了 *[.bam]。有没有网站可以很好地解释这种语法并提供大量示例(程序员级别:新手)
当前代码
> ~/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 |
【问题讨论】:
-
它们被称为 glob 或通配符模式。见mywiki.wooledge.org/BashGuide/Patterns