如何通过Bash循环为count.txt添加表头,第二列为目录名称
批量为count.txt添加对应目录名表头方案
问题背景
存在多个以SRRXXXXX命名的目录,每个目录下都有一个count.txt文件,文件内容为基因ID与对应计数:
gene1 194 gene2 40
目录结构示例:
SRRabcd count.txt SRRefgh count.txt
需要为每个count.txt的首行添加表头:第一列为固定的gene_id,第二列为该文件所在的目录名称(如SRRabcd)。
原脚本问题分析
原脚本中sed命令使用单引号包裹替换字符串,导致Bash无法解析${dir}变量,同时错误使用了"转义符,最终输出表头为gene_id "${dir}"而非实际目录名。
修正后的脚本
#!/bin/bash for dir in /home/path/to/dir/SRR*/ do # 提取目录的纯名称(去除路径和末尾斜杠) dir_name=$(basename "$dir") # 用双引号包裹sed替换字符串,确保变量被解析 sed -i "1s/^/gene_id\t${dir_name}\n/" "${dir}/count.txt" done
关键说明
- 变量解析:Bash中双引号会解析内部变量,单引号则完全保留字符串原样,因此将
sed的替换部分改为双引号包裹,才能让${dir_name}被替换为实际目录名。 - 目录名提取:
basename "$dir"用于从带路径的目录名(如/home/xxx/SRRabcd/)中提取纯目录名称SRRabcd。 - 格式修正:去掉原脚本中的
"转义符,直接使用制表符\t分隔表头两列,保证格式正确。
内容的提问来源于stack exchange,提问作者Shafaque Zahra
相关产品推荐
相关产品推荐

