두 열을 기반으로 한 문자열의 쌍별 조합

두 열을 기반으로 한 문자열의 쌍별 조합

각 데이터 스택에 사용할 수 있는 문자열의 쌍별 조합을 얻으려고 합니다.

입력 파일에는 두 개의 열이 포함되어 있습니다. col1은 유전자 이름이고 col2는 다양한 스트레스 요인의 이름입니다.

        gene1   FishKairomones
        gene1   Microcystin
        gene1   Calcium
        gene2   Cadmium
        gene2   Microcystis
        gene2   FishKairomones
        gene2   Phosphorous
        gene3   FishKairomones
        gene3   Microcystin
        gene3   Phosphorous
        gene3   Cadmium

따라서 표에서 볼 수 있듯이 gene1은 생선 카이로몬, 마이크로시스틴, 칼슘 등 3가지 스트레스 요인에 반응합니다.

나는 다음과 같은 쌍별 테이블을 얻고 싶습니다.

    gene1   FishKairomones  gene1   Microcystin
    gene1   FishKairomones  gene1   Calcium
    gene1   Microcystin gene1   Calcium
    gene2   Cadmium gene2   Microcystis
    gene2   Cadmium gene2   FishKairomones
    gene2   Cadmium gene2   Phosphorous
    gene2   Microcystis gene2   FishKairomones
    gene2   Microcystis gene2   Phosphorous
    gene2   FishKairomones  gene2   Phosphorous

보시다시피, 유전자 1 피쉬 카레인은 유전자 1 마이크로시스틴과 관련이 있고, 유전자 1 피쉬 카레인은 유전자 1 칼슘과 관련이 있으며, 유전자 1 마이크로시스틴은 유전자 1 칼슘과 관련이 있습니다. 다시 말하지만, 저는 모든 유전자에 대해 이 작업을 수행하고 싶습니다.

때때로 유전자는 3개의 스트레스 요인을 가질 수 있고, 때로는 4개 등을 가질 수 있습니다.

나는 여기에서 코드를 시험해 보았다."cat" 파일의 모든 줄을 쌍으로 확장하기 위한 명령줄 도구

이것은 내가 원하는 것이 아닌 전체 파일의 모든 쌍별 조합을 생성합니다.

답변1

AWK솔루션 (심지어무질서한입력 라인):

awk '{ a[$1]=($1 in a? a[$1]",":"")$2 }   # grouping `stressors` by `gene` names
     END { 
         for (k in a) {                   # for each `gene`
             len=split(a[k], b, ",");     # split `stressors` string into array b
             for (i=1;i<len;i++)          # construct pairwise combinations
                 for (j=i+1;j<=len;j++)   # between `stressors` 
                     print k,b[i],k,b[j] 
         } 
     }' file

산출:

gene1 FishKairomones gene1 Microcystin
gene1 FishKairomones gene1 Calcium
gene1 Microcystin gene1 Calcium
gene2 Cadmium gene2 Microcystis
gene2 Cadmium gene2 FishKairomones
gene2 Cadmium gene2 Phosphorous
gene2 Microcystis gene2 FishKairomones
gene2 Microcystis gene2 Phosphorous
gene2 FishKairomones gene2 Phosphorous
gene3 FishKairomones gene3 Microcystin
gene3 FishKairomones gene3 Phosphorous
gene3 FishKairomones gene3 Cadmium
gene3 Microcystin gene3 Phosphorous
gene3 Microcystin gene3 Cadmium
gene3 Phosphorous gene3 Cadmium

관련 정보