파일의 값을 계산하는 방법

파일의 값을 계산하는 방법

주어진 값을 계산하는 방법: 첫 번째 열에는 Contig 값이 포함됩니다.

Contig
c_000000000002
c_000000000002
c_000000000002
c_000000000002
c_000000000003
c_000000000003
c_000000000003
c_000000000003
c_000000000008
c_000000000008
c_000000000013
c_000000000013

열의 값을 계산하고 콘티그에 해당하는 값을 찾고 싶습니다. "Contig"와 "Count_of_Contig"는 탭으로 구분되어야 합니다.

Contig Count_of_contig
c_000000000002 2_1
c_000000000002 2_2
c_000000000002 2_3
c_000000000002 2_4
c_000000000003 3_1
c_000000000003 3_2
c_000000000003 3_3
c_000000000003 3_4
c_000000000008 8_1
c_000000000008 8_2
c_000000000013 13_1
c_000000000013 13_2

이에 대해 한 줄의 Linux 명령을 요청하고 싶습니다. 헤더가 출력에 존재할 필요는 없습니다. 출력을 쉽게 이해하기 위해 여기에 표시됩니다.

답변1

사용하기 쉬운 awk:

awk -F _ -v OFS='\t' '
  NR == 1 {print $0, "Count_of_contig"; next}
  {print $0, 0+$2 "_" ++count[$0]}' < input_file

답변2

이것이 내가 생각하는 가장 좋은 사용 방법입니다밀러

$ mlr --pprint put '
    @n[$Contig] += 1; 
    $Count_of_contig = sub($Contig,"c_0*(.*)","\1_" . @n[$Contig])
  ' input
Contig         Count_of_contig
c_000000000002 2_1
c_000000000002 2_2
c_000000000002 2_3
c_000000000002 2_4
c_000000000003 3_1
c_000000000003 3_2
c_000000000003 3_3
c_000000000003 3_4
c_000000000008 8_1
c_000000000008 8_2
c_000000000013 13_1
c_000000000013 13_2

이는 여러 가지 이유로 실망스럽습니다.

  1. 가지다아니요 ++ 또는 --, 매핑된 값을 증가시키도록 별도의 명령문을 강제 적용

  2. 만약 당신이 이 분야 splita를 시도한다면 , 그것이splitax$Contig000000000013소수8진 정수가 아닌. 따라서 추악한 정규식입니다 sub.

대신 step동사를 사용하여 각 범주에 대한 계산을 수행할 수 있습니다.

$ mlr --pprint step -a counter -f Contig -g Contig then put '
    $Contig_counter = sub($Contig,"c_0*([0-9]+)","\1_" . $Contig_counter)
  ' then rename Contig_counter,Count_of_contig input
Contig         Count_of_contig
c_000000000002 2_1
c_000000000002 2_2
c_000000000002 2_3
c_000000000002 2_4
c_000000000003 3_1
c_000000000003 3_2
c_000000000003 3_3
c_000000000003 3_4
c_000000000008 8_1
c_000000000008 8_2
c_000000000013 13_1
c_000000000013 13_2

값 앞에 접두사를 붙일 필요가 없으면 다음 방법이 선호될 수 있습니다.

$ mlr --pprint step -a counter -f Contig -g Contig input
Contig         Contig_counter
c_000000000002 1
c_000000000002 2
c_000000000002 3
c_000000000002 4
c_000000000003 1
c_000000000003 2
c_000000000003 3
c_000000000003 4
c_000000000008 1
c_000000000008 2
c_000000000013 1
c_000000000013 2

관련 정보