0

ファイルから特定のカウントを取得する必要があります。私が使用しているgrepステートメントは次のようなものです:

counter_pstn=0
completed_count_pstn=0
rec=0
for rec in `(grep "merged" update_completed*.log | awk '{print $1}' | sed 's/ //g' | cut -d':' -f2)`
do
if [ $counter_pstn -eq 0 ]
then
completed_count_pstn=$rec
else
completed_count_pstn=$(($completed_count_pstn+$rec))
fi
counter_pstn=$(($counter_pstn+1))
done
echo "Completed Orders PSTN Primary " $completed_count_pstn

ただし、ログファイルには次の形式のデータが含まれています。

2500 rows merged.
2500 rows merged.
2500 rows merged.
2500 rows merged.2500 rows merged.
2500 rows merged.
2500 rows merged.

その結果、1つのマージのカウントが欠落しています(たとえば、出力の4行目)。grepを変更するか、別の関数を使用してカウントを取得するにはどうすればよいですか。おそらく異なるログの2500番号に注意してください。したがって、カウントを取得するには、「行のマージ」パターンを使用する必要があります。-o、-w grepオプションを試しましたが、機能しません。

上記のデータから期待される出力:

17500

実際の出力を示す:

15000
4

3 に答える 3

2
perl -p -lne 's/merged./merged.\n/g' your_file|awk '{a+=$1}END{print a}'
于 2012-11-16T11:10:33.533 に答える
2

'。'でawkを使用するだけです。これは、各レコードの終わりを示したいと思われるため、レコード区切り文字として使用します。

$ cat file
2500 rows merged.
2500 rows merged.2500 rows merged.
2500 rows merged.

$ awk -v RS='.' '/merged/{sum+=$1} END{print "sum=" sum}' file
sum=10000
于 2012-11-16T13:00:46.277 に答える
0

grep -V出力は何ですか?

とにかく、grepなしでそれを行うことができます:

sed 's/merged\./\n/g' file|awk '{x+=$1}END{print x}'

テスト

kent$  echo "2500 rows merged.
2500 rows merged.
2500 rows merged.
2500 rows merged.2500 rows merged.
2500 rows merged.
2500 rows merged."|sed 's/merged\./\n/g'|awk '{x+=$1}END{print x}'                                                                                                         
17500
于 2012-11-16T11:00:10.627 に答える