저는 생물정보학을 공부하고 있지만 장기적인 경험이 없어서 awk
막혔습니다.
13개의 열이 있는 테이블이 있습니다.
ELL1-XXXXXXXXX
9열에는 (예: ELL1-II_EC_cell1
) 또는 CDK8-XXXXXX
(예: ) 와 같은 다양한 문자열 변형이 있습니다 CDK8-213_mCdk8_ChIPseq_Tnaive_stim_CDK8-214_mCdk8_ChIPseq_Tnaive_stim_AS
.
변경 ELL1-XXXXX
하고 싶은 문자열 변형이 200개가 넘고 다른 문자열도 더 간단한 문자열로 변경하고 싶습니다.ELL1
CDK8
나는 노력했다
awk -F '\t' '{gsub("CDK8-213_mCdk8_ChIPseq_Tnaive_stim_CDK8-214_mCdk8_ChIPseq_Tnaive_stim_AS","CDK8",$9); print}' input.lst > output.lst && mv output.lst input.lst
그런데 그 문자열을 하나씩 찾아서 바꿔야 합니다. 수많은 포럼 스레드를 읽었지만 내 파일에 작동하는 명령을 찾을 수 없습니다.
다음은 입력으로 사용되는 4개의 예제 라인입니다.
DRX154054 ILLUMINA SINGLE ChIP-seq mm_embryonicstemcell_embryonicstemcell Mus_musculus None No ELL1-II_EC_cell121 NA NA NA ftp://ftp-trace.ncbi.nlm.nih.gov/sra/sra-instant/reads/ByExp/sra/DRX/DRX154/DRX154054/
DRX154053 ILLUMINA SINGLE ChIP-seq mm_embryonicstemcell_embryonicstemcell Mus_musculus None No ELL2-II_EC_cell210 NA NA NA ftp://ftp-trace.ncbi.nlm.nih.gov/sra/sra-instant/reads/ByExp/sra/DRX/DRX154/DRX154053/
ERX3608304 ILLUMINA SINGLE ChIP-Seq mm_Unknown_Unknown Mus_musculus None No EP1-BCL6-Fast-C57-Rep1-ChIP-seq NA NA NA ftp://ftp-trace.ncbi.nlm.nih.gov/sra/sra-instant/reads/ByExp/sra/ERX/ERX360/ERX3608304/
DRX154052 ILLUMINA SINGLE ChIP-seq mm_embryonicstemcell_embryonicstemcell Mus_musculus None No DNMT3A-Dnmt3a1_BioChIPSeq_r1 NA NA NA ftp://ftp-trace.ncbi.nlm.nih.gov/sra/sra-instant/reads/ByExp/sra/DRX/DRX154/DRX154052/
예상 출력:
DRX154054 ILLUMINA SINGLE ChIP-seq mm_embryonicstemcell_embryonicstemcell Mus_musculus None No ELL1 NA NA NA ftp://ftp-trace.ncbi.nlm.nih.gov/sra/sra-instant/reads/ByExp/sra/DRX/DRX154/DRX154054/
DRX154053 ILLUMINA SINGLE ChIP-seq mm_embryonicstemcell_embryonicstemcell Mus_musculus None No ELL2 NA NA NA ftp://ftp-trace.ncbi.nlm.nih.gov/sra/sra-instant/reads/ByExp/sra/DRX/DRX154/DRX154053/
ERX3608304 ILLUMINA SINGLE ChIP-Seq mm_Unknown_Unknown Mus_musculus None No EP1 NA NA NA ftp://ftp-trace.ncbi.nlm.nih.gov/sra/sra-instant/reads/ByExp/sra/ERX/ERX360/ERX3608304/
DRX154052 ILLUMINA SINGLE ChIP-seq mm_embryonicstemcell_embryonicstemcell Mus_musculus None No DNMT3A NA NA NA ftp://ftp-trace.ncbi.nlm.nih.gov/sra/sra-instant/reads/ByExp/sra/DRX/DRX154/DRX154052/
보시다시피 다음 문자열이 대체되었습니다.
ELL1-II_EC_cell121
-> ELL1
ELL2-II_EC_cell210
-> ELL2
EP1-BCL6-Fast-C57-Rep1-ChIP-seq
-> EP1
DNMT3A-Dnmt3a1_BioChIPSeq_r1
-> DNMT3A
답변1
탭으로 구분된 데이터를 가정하면 다음과 같습니다.
$ awk -F '\t' -v OFS='\t' '{ sub("-.*", "", $9); print }' file
DRX154054 ILLUMINA SINGLE ChIP-seq mm_embryonicstemcell_embryonicstemcell Mus_musculusNone No ELL1 NA NA NA ftp://ftp-trace.ncbi.nlm.nih.gov/sra/sra-instant/reads/ByExp/sra/DRX/DRX154/DRX154054/
DRX154053 ILLUMINA SINGLE ChIP-seq mm_embryonicstemcell_embryonicstemcell Mus_musculusNone No ELL2 NA NA NA ftp://ftp-trace.ncbi.nlm.nih.gov/sra/sra-instant/reads/ByExp/sra/DRX/DRX154/DRX154053/
ERX3608304 ILLUMINA SINGLE ChIP-Seq mm_Unknown_Unknown Mus_musculus None No EP1 NA NA NA ftp://ftp-trace.ncbi.nlm.nih.gov/sra/sra-instant/reads/ByExp/sra/ERX/ERX360/ERX3608304/
DRX154052 ILLUMINA SINGLE ChIP-seq mm_embryonicstemcell_embryonicstemcell Mus_musculusNone No DNMT3A NA NA NA ftp://ftp-trace.ncbi.nlm.nih.gov/sra/sra-instant/reads/ByExp/sra/DRX/DRX154/DRX154052/
이는 단순히 9번째 필드에 대체를 적용하여 첫 번째 대시 문자로 시작하는 해당 필드의 모든 항목을 제거합니다. 그런 다음 수정된 데이터를 인쇄합니다.
정규식은 -.*
첫 번째 항목부터 시작하여 일치하며 -
(문자 그대로 "a -
뒤에 0개 이상의 문자가 옵니다") sub()
9번째 필드에 빈 대체 문자열을 사용하면 해당 필드의 모든 텍스트 일치 항목이 제거됩니다. gsub()
입력 라인당 하나의 교체만 수행하면 되므로 여기서는 이를 사용할 필요가 없습니다 .
필드 중 하나를 수정했으므로 출력 필드 구분 기호( )가 탭으로 설정되어 있는지도 확인해야 합니다. OFS
그렇지 않으면 출력에서 공백으로 구분된 필드가 표시됩니다. 분명히 블록을 사용하여 이 작업을 수행할 수도 있습니다 BEGIN
.
awk 'BEGIN { OFS=FS="\t" } { sub("-.*", "", $9); print }' file
답변2
밀러 사용(https://github.com/johnkerl/miller) 그리고 실행
mlr --tsv --implicit-csv-header --headerless-csv-output put '$9=gsub($9,"-.+$","")' input >output
당신은 할 것
+------------+----------+--------+----------+----------------------------------------+--------------+------+----+--------+----+----+----+-----------------------------------------------------------------------------------------+
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
+------------+----------+--------+----------+----------------------------------------+--------------+------+----+--------+----+----+----+-----------------------------------------------------------------------------------------+
| DRX154054 | ILLUMINA | SINGLE | ChIP-seq | mm_embryonicstemcell_embryonicstemcell | Mus_musculus | None | No | ELL1 | NA | NA | NA | ftp://ftp-trace.ncbi.nlm.nih.gov/sra/sra-instant/reads/ByExp/sra/DRX/DRX154/DRX154054/ |
| DRX154053 | ILLUMINA | SINGLE | ChIP-seq | mm_embryonicstemcell_embryonicstemcell | Mus_musculus | None | No | ELL2 | NA | NA | NA | ftp://ftp-trace.ncbi.nlm.nih.gov/sra/sra-instant/reads/ByExp/sra/DRX/DRX154/DRX154053/ |
| ERX3608304 | ILLUMINA | SINGLE | ChIP-Seq | mm_Unknown_Unknown | Mus_musculus | None | No | EP1 | NA | NA | NA | ftp://ftp-trace.ncbi.nlm.nih.gov/sra/sra-instant/reads/ByExp/sra/ERX/ERX360/ERX3608304/ |
| DRX154052 | ILLUMINA | SINGLE | ChIP-seq | mm_embryonicstemcell_embryonicstemcell | Mus_musculus | None | No | DNMT3A | NA | NA | NA | ftp://ftp-trace.ncbi.nlm.nih.gov/sra/sra-instant/reads/ByExp/sra/DRX/DRX154/DRX154052/ |
+------------+----------+--------+----------+----------------------------------------+--------------+------+----+--------+----+----+----+-----------------------------------------------------------------------------------------+
답변3
사용 substr
및index
awk -F '\t' '{$9=substr($9, 0, index($9, "-")-1); print}' input.lst > output.lst && mv output.lst input.lst