awk 명령을 사용하여 vcf.gz 파일에서 줄을 삭제합니다.

awk 명령을 사용하여 vcf.gz 파일에서 줄을 삭제합니다.

방금 특정 열에서 특정 값이 있는 행을 필터링하는 방법에 대해 질문했습니다.

이제 특정 열에서 특정 값을 가진 행을 삭제하고 싶습니다. 어떻게 해야 하나요?

예를 들어 1/1표시된 열의 12345행을 삭제 file.vcf.gz하고 나머지 행을newfile.vcf.gz

예를 들어

#CHROM      POS         ALT     12345   
1           345632      T       0/1:4,4:8:99:105,0,106
4           032184      C       1/1:46,9:55:99:99,0,1222
6           843290      A       0/1:67,20:87:99:336,0,1641

예상되는 결과:

1           345632      T       0/1:4,4:8:99:105,0,106
6           843290      A       0/1:67,20:87:99:336,0,1641

답변1

이것은 마지막 질문과 정반대이지만

이 하나.

zcat file.vcf.gz | awk '$4 !~ /^1\/1/' | gzip -c > new.vcf.gz

!$4가 패턴이 아니면 일치합니다. 그러나 헤더 행은 제거되지 않습니다. 헤더 행을 제거하려면 파이프라인에 추가하면 됩니다 head -n +2.

zcat file.vcf.gz | head -n +2 |awk '$4 !~ /^1\/1/' | gzip -c > new.vcf.gz

답변2

행을 삭제하려면 다음을 선호합니다 sed.

zcat file.gz | sed ':1/1:d' | gzip -c > new_file.gz

또는 grep일치하는 줄을 무시하고 inverse 를 실행합니다.

zgrep -v '1/1' file.gz | gzip -c > new_file.gz

헤더를 동시에 제거하려면 중간 sed또는 스트리핑을 하나 더 만드 tail십시오.

zcat file.gz | sed -e ':1/1:d' -e '1d'  | gzip -c > new_file.gz
zgrep -v '1/1' file.gz | tail -n +2 | gzip -c > new_file.gz

관련 정보