ファイルのパース


10 abc
20 abcc
30 abcd
40 xycz
42 wxy
5 abc
20 abcd
30 abcc

というファイルがあり、最初のステップで以下のようにします。

"abc" - 10
"abcc" - 20
"abcd" - 30
...

次のステップで

"abc"  10 - 5 = "abc" 5
"abcc"  20 - 30 = "abcc" -10

のようにしたいそうです。

回答は以下のとおりです。

awk '{a[$2]=(a[$2]=="" ? $1 : a[$2] - $1)} END{for (i in a) print i,a[i] }
 { if (a[$2]=="")      {
        a[$2] = $1
   }
   else {
        a[$2] = a[$2] - $1
        print $2, a[$2]
        a[$2]=""}
}
{ if (a[$2]=="")      {
        a[$2] = $1
   }
   else {
        a[$2] = a[$2] - $1
        print $2, a[$2]
        a[$2]=""}

}

END {
        for (i in a) {
                 if(a[i]!=""){ print i,a[i] }
        }

}
$2 in a { print $2, a[$2] - $1; delete a[$2]; next }
{ a[$2] = $1 }
END { for (i in a) print i, a[i] }