どのようにシェルコマンドで合計を得るか


これが元々のテキスト

[code]

    Tab
    Tab
    Tab
    Enter
    Tab
    Tab
    Tab
    Enter
    Enter
    Enter
    Tab
    Tab
    Tab
    Tab
    Tab
    Enter
    Enter
    Tab
    Tab
    Enter
    
[/code]

この結果を得たい

[code]

    Tab 1
    Tab 2
    Tab 3
    Enter 1
    Tab 1
    Tab 2
    Tab 3
    Enter 1
    Enter 2
    Enter 3
    Tab 1
    Tab 2
    Tab 3
    Tab 4
    Tab 5
    Enter 1
    Enter 2
    Tab 1
    Tab 2
    Enter 1
    
[/code]

試したこと

`cat original.txt|sort -n |uniq -c`

だけどこれは欲しい結果ではない。お助けください。



[code]

    $ uniq -c original.txt | sed 's/^ *\([[:digit:]]\+\) \(.*\)/\2 \1/'
    
[/code]




簡単な文字列と数値に関する計算は、 awk を用いるのが良いと思います。

[code]

    #!/bin/sh
    
    lines() {
        cat <<EOF
    Tab
    Tab
    Tab
    Enter
    Tab
    Tab
    Tab
    Enter
    Tab
    Tab
    Tab
    Tab
    Tab
    Enter
    Tab
    Tab
    Enter
    EOF
    }
    
    lines |
        awk '
            {
                if (current == $0){
                    count += 1
                } else {
                    current = $0
                    count = 1
                }
                print(current " " count)
            }'
    
[/code]

実行結果

[code]

    Tab 1
    Tab 2
    Tab 3
    Enter 1
    Tab 1
    Tab 2
    Tab 3
    Enter 1
    Tab 1
    Tab 2
    Tab 3
    Tab 4
    Tab 5
    Enter 1
    Tab 1
    Tab 2
    Enter 1
    
[/code]

