특정 열의 모든 고유 문자열 나열

특정 열의 모든 고유 문자열 나열

아래와 같이 거대한 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
7           743290      C       0/1:37,20:57:99:336,0,2641
8           329283      T       0/2:99:21:253,0,290:11,10
9           789320      C       2/2:99:21:253,0,290:11,10

다 추출하고 싶다고유한":" 앞에 있는 네 번째 열의 값입니다. 이 경우는 다음과 같습니다.

0/1
1/1
0/2
2/2

추천 메뉴가 무엇인가요?

답변1

다음을 사용하여 awk네 번째 열의 형식이 올바른지 확인하세요 .

awk 'match($4, /^[0-9]+\/[0-9]+:/) {
       c = substr($4, RSTART, RLENGTH-1)
       if (!seen[c]++) print c
     }'

답변2

문자로 시작하는 줄은 주석이거나 무시된다고 가정합니다.

zcat vcf.gz | awk \
   'BEGIN {
        RS = "[\t\v\f ]*(\r\n|\n\r|\r|\n)" ;
        FS = "[\t\v\f ]+"
    }

    /^[A-Za-z]/ {
        next
    }

    NF >= 4 {
        key = $4 ;
        sub(/:.*$/, "", key) ;
        seen[key]++
    }

    END {
        for (key in seen)
            printf "%s\n", key
    }'

\이를 위해 필요한 세미콜론을 모두 추가했으므로 전체 명령을 한 줄에 작성할 수 있습니다( 단, 첫 번째 줄의 끝은 제거).

BEGIN규칙은 범용 개행 지원을 설정합니다. 모든 후행 공백은 무시되며 모든 형태의 개행(CR, LF, CRLF, LFCR)이 개행으로 허용됩니다. 탭이나 공백의 수는 필드 구분 기호로 간주됩니다.

이 규칙은 /^[A-Za-z]/문자로 시작하는 모든 줄에 적용됩니다. 이로 next인해 무시됩니다.

다음 규칙은 필드가 4개 이상인 모든 레코드(행)에 적용됩니다. 네 번째 필드가 변수에 복사된 key다음 첫 번째 콜론 뒤의 모든 내용(및 포함)이 삭제됩니다. 결과 값을 연관 배열의 키로 사용합니다 seen. 우리가 할당하는 값은 중요하지 않지만 여기에는 seen[key]각 값이 참조되는 횟수(1 이상)가 포함됩니다.

END모든 입력이 처리된 후에 규칙이 실행됩니다 . 여기서 루프는 seen[]배열의 키를 (지정되지 않은 순서로) 반복하고 키만 인쇄합니다.

데이터의 순서를 유지하거나 키에 특정 순서를 사용하려면 위의 코드 조각을 약간 수정해야 합니다.

답변3

perl문제가 없는 경우 :

$ perl -lane '($k) = $F[3] =~ m/^([^:]+)/; print $k if !$seen{$k}++ && $. > 1' ip.txt 
0/1
1/1
0/2
2/2
  • ($k) = $F[3] =~ m/^([^:]+)/:열 4 앞의 문자열을 가져옵니다.
  • 고유하고 첫 번째 줄이 아닌 경우 인쇄합니다(헤더를 피하기 위해).


이전 패턴이 :패턴이어야 하는 경우 digits/digits일치 항목을 다음으로 변경합니다.m|^(\d+/\d+):|

답변4

나는 다음을 사용할 것이다:

grep -o -P '.{1}/.{1}' file

귀하의 경우:

zcat vcf.gz | grep -o -P '.{1}/.{1}' 

편집: 한 번만 발생하며 줄 끝에 uniq를 추가합니다.

zcat vcf.gz | grep -o -P './.' |

또는 순서대로 원하는 경우:

zcat vcf.gz | grep -o -P './.' |

관련 정보