0

2 つの列を持つ csv ログ ファイルがあり、それぞれに要求 (1 列目) と応答 (2 列目) のタイム スタンプがあります。

サンプルデータは次のとおりです。

2013-07-11 08:39:08.748,2013-07-11 08:39:08.748
2013-07-11 08:39:08.826,2013-07-11 08:39:08.826
2013-07-11 08:39:08.860,2013-07-11 08:39:08.860
2013-07-11 08:39:08.919,2013-07-11 08:39:08.919
2013-07-11 08:39:08.941,2013-07-11 08:39:08.941
2013-07-11 08:39:09.390,2013-07-11 08:39:09.390
2013-07-11 08:39:09.594,2013-07-11 08:39:09.594
2013-07-11 08:39:09.619,2013-07-11 08:39:09.619
2013-07-11 08:39:09.787,2013-07-11 08:39:09.787
2013-07-11 08:39:10.006,2013-07-11 08:39:10.006
2013-07-11 08:39:10.017,2013-07-11 08:39:10.017
2013-07-11 08:39:10.088,2013-07-11 08:39:10.088
2013-07-11 08:39:10.214,2013-07-11 08:39:10.214

完全なファイルの 2 つの列 (応答 - 要求) の差の平均を計算したいと考えています。このファイルには、1 日に何百万ものエントリが含まれる可能性があります。

シェルスクリプトでそれを行う方法を探しています。助けてください。

ありがとう Fedorqui、私はあなたのスクリプトを試しました:

while read line; 
do 
d1=$(echo $line | cut -d, -f1); 
d2=$(echo $line | cut -d, -f2);  
ds1=$(date -d"$d1" "+%s"); 
ds2=$(date -d"$d2" "+%s"); 
echo "$ds2 - $ds1 = $(( $ds1 - $ds2))"; 
done < requestResponse.csv

それは私に次の結果を与えています:

1373543260 - 1373543260 = 0
1373543260 - 1373543260 = 0
1373543260 - 1373543260 = 0
1373543260 - 1373543260 = 0
1373543260 - 1373543260 = 0
1373543260 - 1373543260 = 0
1373543260 - 1373543260 = 0
1373543261 - 1373543261 = 0
1373543262 - 1373543262 = 0
1373543262 - 1373543262 = 0

ミリ秒単位の差が必要です。

4

1 に答える 1

1

私はナノ秒で基本的なシェルスクリプトでそれを行いました:

while read line
do
   d1=$(echo $line | cut -d, -f1)
   d2=$(echo $line | cut -d, -f2)
   ds1=$(date -d"$d1" "+%s.%N")
   ds2=$(date -d"$d2" "+%s.%N")
   diff=$(echo "$ds2 - $ds1" | bc)
   printf "$ds2 - $ds1 = %.3f\n" $diff
done < file

テスト

$ while read line; do d1=$(echo $line | cut -d, -f1); d2=$(echo $line | cut -d, -f2); ds1=$(date -d"$d1" "+%s.%N"); ds2=$(date -d"$d2" "+%s.%N"); diff=$(echo "$ds2 - $ds1" | bc); printf "$ds2 - $ds1 = %.3f\n" $diff; done < file
1373524748.748000000 - 1373524748.748000000 = 0.000
1373524748.826000000 - 1373524748.826000000 = 0.000
1373524748.860000000 - 1373524748.860000000 = 0.000
1373524748.919000000 - 1373524748.919000000 = 0.000
1373524748.941000000 - 1373524748.941000000 = 0.000
1373524749.390000000 - 1373524749.390000000 = 0.000
1373524749.594000000 - 1373524749.594000000 = 0.000
1373524749.619000000 - 1373524749.619000000 = 0.000
1373524749.787000000 - 1373524749.787000000 = 0.000
1373524750.006000000 - 1373524750.006000000 = 0.000
1373524750.017000000 - 1373524750.017000000 = 0.000
1373524750.088000000 - 1373524750.088000000 = 0.000
1373524750.214000000 - 1373524750.214000000 = 0.000
于 2013-07-11T13:32:47.360 に答える