10個の値を示すログファイルがあり、最後の列の値はバイト単位のメモリです。過去4日間に使用された最大メモリを表示するには、どのコマンドまたはスクリプトを使用する必要がありますか?curl
または、コマンドを使用して過去awk
4日間に使用された最大メモリ値を取得する方法は?
ログファイルの名前はで、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
数量が可変の場合は、いつでもこのコマンドをに置き換える=
ことができます。cut
awk -F'=' '{print $NF}'
答え4
以下はEd Mortonの答えに似た別の答えですが、固定金額は必要ありません=
。
grep -oh "memory.[0-9,=]*" file | cut -d'=' -f2 | sort -rn | head -1