약 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