如何向第二列作为目录名称的列添加标题

问题描述 投票:0回答:1

我有多个目录中包含 ID 和计数的计数文件(对于每个加入 SRRXXXXX)。我想使用 bash 循环在每个文件中添加标头“gene_id”和 SRRabcdXXX。

目录结构如下:

SRRabcd
  count.txt
SRRefgh
  count.txt

我的文件

gene1 194
gene2 40     

我在做什么

#!/bin/bash
for dir in /home/path/to/dir/SRR*/
do
sed -i '1s/^/gene_id\t"${dir}"\n/' "$dir"/count.txt
done

我的输出

gene_id "${dir}"
gene1 194
gene2 40

我想要的输出(对于单个文件)

gene_id SRRabcdef
gene1 194
gene2 40
linux bash loops sed bioinformatics
1个回答
0
投票

将整个

sed
脚本用双引号括起来,以允许扩展
bash
变量
dir
,例如:

sed "1s/^/gene_id\t${dir}\n/" "$dir"/count.txt
    ^                       ^

样本数据:

$ head SRR*/count.txt
==> SRRabcd/count.txt <==
gene1 194
gene2 40

==> SRRefgh/count.txt <==
gene1 395
gene2 17

修改后的脚本:

for dir in SRR*
do 
    echo "########## $dir"
    sed "1s/^/gene_id\t${dir}\n/" "$dir"/count.txt
done

这会生成:

########## SRRabcd
gene_id SRRabcd
gene1 194
gene2 40
########## SRRefgh
gene_id SRRefgh
gene1 395
gene2 17

一旦确认结果正确,您就可以添加

-i
标志。

© www.soinside.com 2019 - 2024. All rights reserved.