【问题标题】:Bash: For Loop & save each output as a new column in a csvBash:For循环并将每个输出保存为csv中的新列
【发布时间】: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      |

【问题讨论】:

标签: linux bash awk


猜你喜欢
  • 2016-04-25
  • 1970-01-01
  • 2022-11-28
  • 2022-12-19
  • 1970-01-01
  • 2020-04-18
  • 2021-07-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多