Linux
如何合併多個不按順序排列的文件並將文件名分配給linux中的特定列?
我有大約 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
.gtf
如您所見,第二列的名稱在所有 3 個文件中的順序不同。我正在嘗試合併所有三個 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
$ 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