Unix에서 줄이 특정 값으로 시작되면 순서를 늘립니다.

Unix에서 줄이 특정 값으로 시작되면 순서를 늘립니다.

줄 시작 부분에 고정 단어가 있으면 증가하고, 그렇지 않으면 같은 숫자를 계속 사용하고 싶습니다.

입력하다:

CH,A11R,Q9Y5X3,SNX5  
CD,A12L,Q9Y316,MEMO1  
CD,A12L,Q70CQ2,USP34  
CT,A12L,Q8N7H5,PAF1   
CH,A12L,Q8IZL8,PELP1  
CD,A13L,Q5SY16,NOL9   
CD,A13L,Q6P1J9,CDC73  
CT,A13L,Q8WVC0,LEO1   
CH,A13L,Q9Y4W2,LAS1L  
CD,A13L,Q6PD62,CTR9 

첫 번째 열이 CH로 시작하면 다음 숫자로 계속되고 그렇지 않으면 같은 숫자를 인쇄합니다.

산출:

CH,A11R,Q9Y5X3,SNX5  ,1  
CD,A12L,Q9Y316,MEMO1 ,1  
CD,A12L,Q70CQ2,USP34 ,1  
CT,A12L,Q8N7H5,PAF1  ,1  
CH,A12L,Q8IZL8,PELP1 ,2  
CD,A13L,Q5SY16,NOL9  ,2  
CD,A13L,Q6P1J9,CDC73 ,2  
CT,A13L,Q8WVC0,LEO1  ,2  
CH,A13L,Q9Y4W2,LAS1L ,3  
CD,A13L,Q6PD62,CTR9  ,3

답변1

(any) 의 경우 awk도구 상자에는 다음이 있어야 합니다.

awk 'BEGIN{FS=OFS=","}$1=="CH"{lc++}{print $0,lc}' file

동일한 명령이지만 더 쉽게 이해할 수 있도록 여러 줄로 구분되어 있습니다.

awk '
    BEGIN{FS=OFS=","}  # set input and output fields separator as ","
    $1=="CH"{lc++}     # if $1(first column)==CH, increment lc (last column)
    {print $0,lc}      # print current line and the variable lc
' file

출력이 필요한 경우있는 그대로:

awk 'BEGIN{FS=OFS=","}$1=="CH"{lc++}{printf("%-20s,%d\n", $0,lc)}' file

CH,A11R,Q9Y5X3,SNX5 ,1
CD,A12L,Q9Y316,MEMO1,1
CD,A12L,Q70CQ2,USP34,1
CT,A12L,Q8N7H5,PAF1 ,1
CH,A12L,Q8IZL8,PELP1,2
CD,A13L,Q5SY16,NOL9 ,2
CD,A13L,Q6P1J9,CDC73,2
CT,A13L,Q8WVC0,LEO1 ,2
CH,A13L,Q9Y4W2,LAS1L,3
CD,A13L,Q6PD62,CTR9 ,3

관련 정보