파일 세트의 문자열을 다른 문자열로 바꾸는 방법은 무엇입니까? [폐쇄]

파일 세트의 문자열을 다른 문자열로 바꾸는 방법은 무엇입니까? [폐쇄]

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

관련 정보