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
- 累積集計結果