ログから最大値を取得する方法

ログから最大値を取得する方法

10個の値を示すログファイルがあり、最後の列の値はバイト単位のメモリです。過去4日間に使用された最大メモリを表示するには、どのコマンドまたはスクリプトを使用する必要がありますか?curlまたは、コマンドを使用して過去awk4日間に使用された最大メモリ値を取得する方法は?

ログファイルの名前はで、ansh.log次の内容が含まれます。

 Timestamp ,xyz=1, abc=2, def=6 ,memory=64357890
Timestamp ,xyz=1 ,abc =2 , def =6 , memory=64987201

最後の列()の最高値が欲しいですmemory。このログファイルには過去4日間のログ行が含まれているため、ファイルサイズは非常に大きいです。

答え1

最大値だけを探しているので、並べ替えは必要なく、ファイルをスキャンするだけです。

awk -F "=" '
    $NF > max {max = $NF}
    END {print max}
' ansh.log

一行が好きなら

awk -F= '$NF > max {max = $NF} END {print max}' ansh.log

答え2

sed/cut/awk を使用して必要に応じて分割し、回答を並べ替えて最後の回答のみを表示し、最高の回答を得ることができます。

多くのサブコマンドの例は読みやすくなります。

$
 cat > /tmp/a #define a fake-file for test/demo
Timestamp ,xyz=1, abc=2, def=6 ,memory=64357890 Timestamp ,xyz=1 ,abc =2 , def =6 , memory=64987201
Timestamp ,xyz=1, abc=2, def=6 ,memory=64357890 Timestamp ,xyz=1 ,abc =2 , def =6 , memory=64987555
Timestamp ,xyz=1, abc=2, def=6 ,memory=64357890 Timestamp ,xyz=1 ,abc =2 , def =6 , memory=64798797
Timestamp ,xyz=1, abc=2, def=6 ,memory=64357890 Timestamp ,xyz=1 ,abc =2 , def =6 , memory=64911111
Timestamp ,xyz=1, abc=2, def=6 ,memory=64357890 Timestamp ,xyz=1 ,abc =2 , def =6 , memory=61111111
$
  sed "s/ Time/\nTime/1 ; s/.*=//" /tmp/a | sort -n | tail -1 # one line for each timestamp even we have many on same line / then get only number / then sort numbers / then keep only the last one (higher cause they are sorted)
64987555 
$
 variable=$(sed "s/ Time/\nTime/1 ; s/.*=//" /tmp/a | sort -n | tail -1)  # if your want that in a variable only
$
 echo ${variable}
64987555
$
 rm /tmp/a  # remove test-file 

答え3

@glennjackmanはすでにawkスクリプトを扱っているので、=入力例に示すように、各行には常に4つあると仮定すると、実際には非常に簡潔で効率的な選択肢があります。

$ cut -d'=' -f5 file | sort -rn | head -1
64987201

数量が可変の場合は、いつでもこのコマンドをに置き換える=ことができます。cutawk -F'=' '{print $NF}'

答え4

以下はEd Mortonの答えに似た別の答えですが、固定金額は必要ありません=

grep -oh "memory.[0-9,=]*" file | cut -d'=' -f2 | sort -rn | head -1

関連情報