안녕하세요. 아래와 같은 디렉터리가 있습니다.
TBS890
|___________ A.ctab
TBS345A
|___________ A.ctab
TBS567C
|___________ A.ctab
모든 디렉토리에 있는 A.ctab 파일에서 일부 데이터를 추출하고 싶습니다. A.ctab
12개의 열이 있다고 가정합니다 . 저는 6열과 12열에 관심이 있습니다. 이를 위해 아래와 같은 작업을 시도했지만 모든 정보를 얻지 못했습니다.
awk 'FNR==1 { print substr(FILENAME,1,$NF) >substr(FILENAME,1,$NF)".tmp" }
FNR >1 { print $12 > substr(FILENAME,1,$NF)".tmp" }
NR==FNR{ print $6 >"first_column.tmp" }' TBS*/A.ctab
위의 명령에서 볼 수 있듯이 $NF
이것은 입니다 FILENAME
. 이것이 잘못된 것임을 알고 있으므로 누구든지 나를 도울 수 있습니다.
위의 예에서 보면 두 디렉터리는 문자 an으로 끝나지만 한 디렉터리는 그렇지 않습니다. 끝까지 이 이름을 얻기 위해 나는 무엇을 바쳐야 했을까.
t_id chr strand start end t_name num_exons length gene_id gene_name cov FPKM
1 1 - 10060 10614 MSTRG.1.1 1 555 MSTRG.1 . 0.000000 0.000000
2 1 + 11140 30023 MSTRG.10.1 12 3981 MSTRG.10 . 2.052715 0.284182
3 1 - 11694 29342 MSTRG.11.1 8 6356 MSTRG.11 . 0.557588 0.077194
4 1 + 11869 14409 ENST00000456328.2 3 1657 MSTRG.10 DDX11L1 0.000000 0.000000
5 1 + 11937 29347 MSTRG.10.3 12 3544 MSTRG.10 . 0.000000 0.000000
6 1 - 11959 30203 MSTRG.11.2 11 4547 MSTRG.11 . 0.369929 0.051214
7 1 + 12010 13670 ENST00000450305.2 6 632 MSTRG.10 DDX11L1 0.000000 0.000000
8 1 + 12108 26994 MSTRG.10.5 10 5569 MSTRG.10 . 0.057091 0.007904
9 1 + 12804 199997 MSTRG.10.6 12 3567 MSTRG.10 . 0.000000 0.000000
10 1 + 13010 31097 MSTRG.10.7 12 4375 MSTRG.10 . 0.000000 0.000000
11 1 - 13068 26832 MSTRG.11.3 9 5457 MSTRG.11 . 0.995280 0.137788
A.ctab
모든 파일에서 t_name
병치를 추출 FPKM
하고 새 파일을 만들고 싶습니다. 새 파일에서 FPKM
열은 샘플 이름이어야 합니다. 다음과 같아야 합니다.
t_name TBS890 TBS345A TBS567C
MSTRG.1.1 0 0.028181 0
MSTRG.10.1 0.284182 0.002072 0.046302
MSTRG.11.1 0.077194 0.685535 0.105849
ENST00000456328.2 0 0.307315 0.038961
MSTRG.10.3 0 0.446015 0.009946
MSTRG.11.2 0.051214 0.053577 0.036081
ENST00000450305.2 0 0.110438 0.040319
MSTRG.10.5 0.007904 0 1.430825
MSTRG.10.6 0 0 0.221105
MSTRG.10.7 0 0.199354 0
MSTRG.11.3 0.137788 0.004792 0
답변1
t_name
모든 파일의 줄 수가 동일한 경우 다음을 시도하십시오.
$ awk '
FNR == NR {print $6 > "COL1.TMP"
}
FNR == 1 {FN = FILENAME
sub (/\/[^\/]*$/, ".TMP", FN)
print FN > FN
next
}
{print $12 > FN
}
' TBS*/A.ctab
$ paste -d"\t\t\t\n" COL1.TMP TBS*.TMP
그렇지 않다면 join
유틸리티를 생각하겠지만 정렬된 입력이 필요합니다.