모든 열을 기반으로 중복 또는 uinq 값에 고유 식별자 또는 일련 번호를 할당합니다.

모든 열을 기반으로 중복 또는 uinq 값에 고유 식별자 또는 일련 번호를 할당합니다.

중복된 값이 있는 이와 같은 입력 파일이 있습니다. 첫 번째 열(col1)을 기반으로 각 uniq 값에 대해 uniq 식별자를 제공하고 싶습니다. mins 중복 행은 col1의 중복 값을 기반으로 소수점 앞에 동일한 식별자를 갖습니다. 도움 좀 주세요 guyz, 감사합니다. 전진.

    Ca3CNSNP431180  2428    2435    0   TTTATttt    AT-Hook 1
    Ca3CNSNP431179  2429    2437    0   TTATTttat   AT-Hook 1
    Ca3CNSNP431178  2428    2436    0   TTTATttta   AT-Hook 1
    Ca4CNSNP431177  1384    1388    0   ATTGA   NF-YB;NF-YA;NF-YC   1
    Ca4CNSNP431176  1382    1386    0   AGATT   Myb/SANT;MYB;ARR-B  1
    Ca4CNSNP431175  1382    1386    0   AGATT   GATA;tify   1
    Ca4CNSNP431174  1386    1398    0   tgaAATTTtcatt   TCR;CPP 2
    Ca4CNSNP431174  1386    1398    0   tgaAATTTtcatt   TCR;CPP 2
    Ca4CNSNP431172  1383    1395    0   gattgAAATTttc   TCR;CPP 2
    Ca4CNSNP431172  1383    1395    0   gattgAAATTttc   TCR;CPP 2
    Ca3CNSNP430205  3334    3343    0   tATATAtata  AT-Hook 3
    Ca3CNSNP430205  3334    3343    0   tATATAtata  AT-Hook 3
    Ca3CNSNP430205  3334    3343    0   tATATAtata  AT-Hook 3

원하는 출력 :

identifier  col1    col2    col3    col4    col5    col6    col7
 000001.1   Ca3CNSNP431180  2428    2435    0   TTTATttt    AT-Hook 1
 000002.1       Ca3CNSNP431179  2429    2437    0   TTATTttat   AT-Hook 1
 000003.1       Ca3CNSNP431178  2428    2436    0   TTTATttta   AT-Hook 1
 000004.1       Ca4CNSNP431177  1384    1388    0   ATTGA   NF-YB;NF-YA;NF-YC   1
 000005.1       Ca4CNSNP431176  1382    1386    0   AGATT   Myb/SANT;MYB;ARR-B  1
 000006.1       Ca4CNSNP431175  1382    1386    0   AGATT   GATA;tify   1
 000007.1       Ca4CNSNP431174  1386    1398    0   tgaAATTTtcatt   TCR;CPP 2
 000007.2       Ca4CNSNP431174  1386    1398    0   tgaAATTTtcatt   TCR;CPP 2
 000008.1       Ca4CNSNP431172  1383    1395    0   gattgAAATTttc   TCR;CPP 2
 000008.2       Ca4CNSNP431172  1383    1395    0   gattgAAATTttc   TCR;CPP 2
 000009.1       Ca3CNSNP430205  3334    3343    0   tATATAtata  AT-Hook 3
 000009.2       Ca3CNSNP430205  3334    3343    0   tATATAtata  AT-Hook 3
 000009.3       Ca3CNSNP430205  3334    3343    0   tATATAtata  AT-Hook 3

답변1

짧은awk해결책:

awk '{ printf "%06d.%d\t%s\n",(!a[$1]++? ++c:c),a[$1],$0 }' file
  • !a[$1]++- 첫 번째 필드의 고유 값을 확인합니다 $1(배열의 인덱스로 사용됨 a).

  • ++c- c접두사각 고유 항목에 대해 값이 증가합니다(소수점 이전).

  • a[$1]-접미사값(소수점 이하) - 첫 번째 필드 값의 발생 횟수를 나타냅니다.$1

  • %06d.%d- 출력 형식 지정자. 여기서는 %06d크기를 나타냅니다.정수 부분숫자 d(앞에 0이 붙은 크기 6 06) 및 .%d-규모숫자의 (분수 부분)


출력:

000001.1    Ca3CNSNP431180  2428    2435    0   TTTATttt    AT-Hook 1
000002.1    Ca3CNSNP431179  2429    2437    0   TTATTttat   AT-Hook 1
000003.1    Ca3CNSNP431178  2428    2436    0   TTTATttta   AT-Hook 1
000004.1    Ca4CNSNP431177  1384    1388    0   ATTGA   NF-YB;NF-YA;NF-YC   1
000005.1    Ca4CNSNP431176  1382    1386    0   AGATT   Myb/SANT;MYB;ARR-B  1
000006.1    Ca4CNSNP431175  1382    1386    0   AGATT   GATA;tify   1
000007.1    Ca4CNSNP431174  1386    1398    0   tgaAATTTtcatt   TCR;CPP 2
000007.2    Ca4CNSNP431174  1386    1398    0   tgaAATTTtcatt   TCR;CPP 2
000008.1    Ca4CNSNP431172  1383    1395    0   gattgAAATTttc   TCR;CPP 2
000008.2    Ca4CNSNP431172  1383    1395    0   gattgAAATTttc   TCR;CPP 2
000009.1    Ca3CNSNP430205  3334    3343    0   tATATAtata  AT-Hook 3
000009.2    Ca3CNSNP430205  3334    3343    0   tATATAtata  AT-Hook 3
000009.3    Ca3CNSNP430205  3334    3343    0   tATATAtata  AT-Hook 3

관련 정보