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을 뺀 다음 이를 전달하여 결합하는 것입니다.