쉼표 뒤 연속된 5개의 빈 줄 수 [닫힘]

쉼표 뒤 연속된 5개의 빈 줄 수 [닫힘]
day:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30
ab1:,P,,P,,,,,,,,,P,P,P,,,,P,P,P,P,,,P,P,P,,P,,

ab2:P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,,

ab3:,,,P,,,,,,,,P,P,P,P,P,P,P,P,P,P,P,,,,,,,,,

연속 공백 개수가 5보다 큰 경우 연속 공백 개수 결과를 인쇄합니다.

ab1:8

ab2:0

ab3:7,8

ab3의 경우 4일부터 12일까지의 날짜 사이: 출력: ab3:7

답변1

멍하니해결책:

awk -v FPAT='ab[0-9]+:|,{5,}' 'NR>1 && NF{ 
           r=""; 
           for(i=2;i<=NF;i++) { 
               len=length($i)-1; if(len >= 5) r=(r!="")? r","len : len 
           } 
           printf("%s%s\n", $1, (r!="")? r : 0) 
       }' file

산출:

ab1:8
ab2:0
ab3:7,8

세부 사항:

  • -v FPAT='ab[0-9]+:|,{5,}'- 필드 값의 패턴 정의

  • for(i=2;i<=NF;i++)- 일련의 쉼표로 구성된 필드를 반복합니다.

  • len=length($i)-1- "빈" 공백이 뒤따르는 쉼표의 수를 셉니다.

  • r=(r!="")? r","len : len- 누적 집계 결과

답변2

perl -lne '/^ab/ and print /^(ab\d+:)/, /P,{6,}/ ? join ",", map tr/,//d-1, //g : 0' data

Output:-
ab1:8
ab2:0
ab3:7,8

ab로 시작하는 줄만 표시됩니다.

map변환은 P 뒤에 쉼표가 5개 이상 오는 필드에 적용됩니다. 지도가 하는 일은 쉼표에서 1을 뺀 다음 이를 전달하여 결합하는 것입니다.

관련 정보