カンマの後に連続する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- 累積集計結果

おすすめ記事