我有大约 250 个.gtf
文件。这里我展示了 3 个.gtf
文件。所有.gtf
文件都有三列,如下所示:
TUSCC120A.gtf
TUSCC36.gtf
TUSCC89B.gtf
TUSCC120A.gtf
如下所示:
transcript MSTRG.6968.1 0.000000
transcript MSTRG.6968.2 1.000000
transcript MSTRG.6975.2 0.000000
transcript ENST00000446 3.000000
transcript ENST00000432 0.000000
TUSCC36.gtf
如下所示:
transcript ENST00000446 3.456000
transcript MSTRG.6968.2 1.342000
transcript MSTRG.6968.1 0.000000
transcript MSTRG.6975.2 4.000000
transcript ENST00000432 5.000000
TUSCC89B.gtf
如下所示:
transcript MSTRG.6975.2 2.213000
transcript MSTRG.6968.2 4.342000
transcript ENST00000432 2.000000
transcript ENST00000446 0.000000
transcript MSTRG.6968.1 3.000000
正如您所看到的第二列,所有 3 个文件中的名称顺序都不同.gtf
。我正在尝试合并所有三个 gtf 文件。我尝试过paste
paste TUSCC120A.gtf TUSCC36.gtf TUSCC89B.gtf > output.txt
output.txt
好像:
transcript MSTRG.6968.1 0.000000 transcript ENST00000446 3.456000 transcript MSTRG.6975.2 2.213000
transcript MSTRG.6968.2 0.000000 transcript MSTRG.6968.2 1.342000 transcript MSTRG.6968.2 4.342000
transcript MSTRG.6975.2 0.000000 transcript MSTRG.6968.1 0.000000 transcript ENST00000432 2.000000
transcript ENST00000446 0.000000 transcript MSTRG.6975.2 4.000000 transcript ENST00000446 0.000000
transcript ENST00000432 0.000000 transcript ENST00000432 5.000000 transcript MSTRG.6968.1 3.000000
我希望输出如下所示:
ID target_Ids TUSCC120A TUSCC36 TUSCC89B
transcript MSTRG.6968.1 0.000000 0.000000 3.000000
transcript MSTRG.6968.2 1.000000 1.342000 4.342000
transcript MSTRG.6975.2 0.000000 4.000000 2.213000
transcript ENST00000446 3.000000 3.456000 0.000000
transcript ENST00000432 0.000000 5.000000 2.000000
答案1
$ cat -f tst.awk
BEGIN {
header = "id" FS "target_id"
}
FNR == 1 {
f = FILENAME
sub(/\.gtf/,"",f)
header = header FS f
}
{
row[$2] = (FNR==NR ? $0 : row[$2] FS $3)
}
END {
print header
for (x in row) print row[x]
}
用法:
$ awk -f tst.awk *.gtf
id target_id TUSCC120A TUSCC36 TUSCC89B
transcript MSTRG.6968.1 0.000000 0.000000 3.000000
transcript MSTRG.6975.2 0.000000 4.000000 2.213000
transcript MSTRG.6968.2 1.000000 1.342000 4.342000
transcript ENST00000446 3.000000 3.456000 0.000000
transcript ENST00000432 0.000000 5.000000 2.000000