주어진 값을 계산하는 방법: 첫 번째 열에는 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
이는 여러 가지 이유로 실망스럽습니다.
가지다아니요 ++ 또는 --, 매핑된 값을 증가시키도록 별도의 명령문을 강제 적용
만약 당신이 이 분야
splita
를 시도한다면 , 그것이splitax
$Contig
000000000013
소수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