1

次のデータを計算するにはどうすればよいですか?

Input:

2 Printers
2 x 2 Cartridges
2 Router
1 Cartridge

出力:

Total Number of Printers: 2
Total Number of Cartridges: 5 
Total Number of Router: 2

カートリッジが掛けられていることに注意してください(2 x 2) + 1 = 5。次のことを試しましたが(2 x 2)、シナリオの種類がある場合に番号を取得する方法がわかりません:

awk -F " " '{print $1}' Cartridges.txt >> Cartridges_count.txt
CartridgesCount=`( echo 0 ; sed 's/$/ +/' Cartridges_count.txt; echo p ) | dc`

echo "Total Number of Cartridges: $CartridgesCount"

お知らせ下さい。

4

2 に答える 2

1

これは、データに乗算演算子のみがあることを前提としています。

awk '{$NF = $NF "s"; sub("ss$", "s", $NF); qty = $1; for (i = 2; i < NF; i++) {if ($i ~ /^[[:digit:]]+$/) {qty *= $i}}; items[$NF] += qty} END {for (item in items) {print "Total number of", item ":", items[item]}}'

複数の行に分割:

awk '{
        $NF = $NF "s"; 
        sub("ss$", "s", $NF); 
        qty = $1; 
        for (i = 2; i < NF; i++) {
            if ($i ~ /^[[:digit:]]+$/) {
                qty *= $i
            }
        }; 
        items[$NF] += qty
     } 
     END {
         for (item in items) {
             print "Total number of", item ":", items[item]
         }
     }'
于 2012-05-15T21:24:32.140 に答える
0

このようなことを試してください(適切にフォーマットされた入力を前提としています)...

sed -e 's| x | * |' -e 's|^\([ 0-9+*/-]*\)|echo $((\1)) |' YourFileName | sh | awk '{a[$2]+=$1;} END {for (var in a) print a[var] " "var;}'

PSカートリッジとカートリッジは異なります。それも処理したい場合は、さらに困難になりますが、パイプラインの最後の awk を変更できます。

于 2012-05-15T20:05:20.417 に答える