2016-08-31 16 views
-1

以下のデータがあります。計算するUnixシェルスクリプト

24692 -rw-rw-r--+ 1 da01 da01 25284427 Aug 31 09:06 collected_BOT.227031  
24660 -rw-rw-r--+ 1 da01 da01 25248756 Aug 31 09:35 collected_BOT.227032  
24748 -rw-rw-r--+ 1 da01 da01 25338868 Aug 31 10:03 collected_BOT.227033  
24740 -rw-rw-r--+ 1 da01 da01 25331322 Aug 31 10:31 collected_BOT.227034 

サンプル:

grep 1303 collected_BOT.227034 | more  
1559254293,151840703,AJ1X,10178801756650692,VA,VB,0,0,2,2,1303,1,L1O,6797,129,1,3,601,0,GVW1,9110,551,17,000000,0001,000000,,6,4,,1,1,,0 
1559254294,151840704,AJ2X,10178801756650693,VA,VB,0,0,2,2,1303,1,L2O,6797,203,1,3,601,0,GVW2,9110,552,17,000000,0001,000000,,6,4,,1,1,,0 
1559254295,151840705,AJ3X,10178801756650694,VA,VB,0,0,2,2,1303,1,L3O,6797,664,1,3,601,0,GVW3,9110,552,17,000000,0001,000000,,6,4,,1,1,,0 

$15 = duration

私はちょうどファイルcollected_BOT.227034(場合のみ$ = 11 1303

答えて

1
awk -F, '$11==1303{sum+=$15} END {print sum}' collected_BOT.227034 
    に合計金額 $15を計算したいですもしそうであれば 11thフィールドが正確(その初期値は、デフォルトでゼロである) sum可変
15thフィールドの値を追加し、数 1303
  • と一致した場合
  • -F,フィールドセパレータは,
  • $11==1303チェックです
  • END {print sum}入力ファイルのすべての行を処理した後、sumという変数の値を出力します。

編集:出力は何のラインが一致していなくても「0」として必要とされている場合$11==1303はまた$11 ~ /^1303$/

の代わりに使用することができることを指摘し

おかげで@マークSetchell、print sum + 0を使用しています。または明示的なBEGIN{sum=0}ブロック

+1

'1303'は数値なので、パターンマッチングではなく' $ 11 == 1303'を使うほうが良いかもしれません。 –

+1

ところで、 'print sum'を' print sum + 0'に変更すると、合計がゼロの場合、または一致する行がない場合でも機能します。 –

+0

@MarkS私がチェックしたのは、 'sum + 0'がなくても動作します。私の' GNU Awk 4.1.3'は違いがありますか? – Sundeep

0

グレートソリューション@spアジア。

しかしフィールド$11のための正規表現を使用する必要はありません:

awk -F, '$11=="1303" {sum+=$15} END {print sum}' collected_BOT.227034 

(用心:==なく=を使用し、$11

をフィールドする(成功)の割り当てを行う以外、この最後のものは何もしませんので、
+0

数値を二重引用符で囲むのはなぜですか? –

+0

こんにちはJ. Chomel、 その仕事:)ありがとうございました。 私は簡単に理解できる説明を提供します。 –

+0

@GaidenSaga、これがうまくいくならば、正しい答えとしてそれを受け入れるべきです(http://stackoverflow.com/help/accepted-answer)。 –

関連する問題