

例

[code]

    7月1日　7月2日 7月3日　... 9月30日
    10000   10000 20000       13000
    
[/code]

上記のようなファイルがあると仮定します。

これらを7月1日から7月3日までを足し合わせ、それらを半永久的に数値があるだけ繰り返すにはどうしたらよいでしょうか？

[code]

    7月1日　7月2日 7月3日　
    10000   10000 20000   
    ↓
    7月1~3日 7月2~4日　7月3~日
    40000　　　・・・　　・・・
    
[/code]

こんな感じのイメージです。


CC BY-SA 4.0
2018-07-20T13:10:36.730
46790
2018-07-20T15:04:33.697
2018-07-20T13:18:42.587
19110
29395
question
linux
awk文に関しての質問です。


入力データのカラムの区切り文字がよく分からないので、スペースやタブ文字の連続と仮定して、出力はタブ区切りにしています。

[code]

    awk -F '[ \t]+|月|日[ \t]*' -vOFS='\t' '
      NR==1{
        idx=0
        for(i=1;i<=(NF-5);i+=2){
          idx++
          if($i==$(i+4)){
            $idx = $i"月"$(i+1)"〜"$(i+5)"日"
          } else {
            $idx = $i"月"$(i+1)"日〜"$(i+4)"月"$(i+5)"日"
          }
        }
        NF=idx;print
      }
      NR==2{
        for(i=1;i<=(NF-2);i++){
          $i = $i + $(i+1) + $(i+2)
        }
        NF=idx;print
      }
    ' data.txt
    
[/code]

月が変わる場合は開始と終了の日付全体を出力します。

[code]

    ... 7月29〜31日 7月30日〜8月1日 7月31日〜8月2日 8月1〜3日 ...
    
[/code]


CC BY-SA 4.0
2018-07-20T15:04:33.697
46794
2018-07-20T15:04:33.697
46790
answer