vcf 파일 세트가 있는데 각 파일에는 'SRR'로 시작하는 문자열이 있습니다. 예를 들어 file1에는 다음 줄이 있습니다.
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT SRR2481146_1
파일 2에는 다음이 있습니다.
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT SRR2481151_1
파일 3에는 다음이 있습니다.
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT SRR2481163_1
이 문자열을 특정 셀 라인 이름으로 바꾸고 싶습니다. 예를 들어 file1의 'SRR2481146_1'을 'HCT116_DMSO'로 바꾸고, file2의 'SRR2481151_1'을 'SW_DMSO'로 바꾸고, file3의 'SRR2481163_1'을 'COLO205'로 바꾸는 등의 작업을 수행합니다. .
즉, file1의 경우 원하는 출력은 다음과 같아야 합니다.
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT HCT116_DMSO
파일 2의 경우:
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT SW_DMSO
다음과 같은 코드를 사용하여 혼자서 이 작업을 수행할 수 있다는 것을 알고 있습니다.
sed -i 's/SRR2481146_1/HCT116_DMSO/g' file1
sed -i 's/SRR2481151_1/SW_DMSO/g' file2
하지만 약 100개의 파일이 있기 때문에 시간이 너무 많이 걸립니다.
좋은 방법 없을까요?
감사해요!
답변1
@Kusalananda가 쓴 것처럼,https://bioinformatics.stackexchange.com/. 누군가가 이 질문을 그곳으로 옮길 수 있을까요?
각 줄에 이전 이름과 원하는 새 이름을 공백으로 구분하여 기록하는 텍스트 파일을 만듭니다.
$ cat names.txt
SRR2481146_1 HCT116_DMSO
SRR2481151_1 SW_DMSO
사용bcftools 리헤더샘플 이름을 다음과 같이 변경합니다.
$ bcftools reheader -s names.txt file.vcf > file_renamed.vcf
당신은 그것을 사용할 수 있습니다GNU 병렬vcf
폴더의 모든 파일에 대해 다음 명령을 실행합니다.
$ parallel 'bcftools reheader -s names.txt {} > {.}_renamed.vcf' ::: *.vcf