我有日志文件,其中显示十个值,最后一列值是以字节为单位的内存。如果我想显示过去四天使用的最高内存,我应该使用什么命令或脚本?在curl
or命令的帮助下,awk
如何获取最近四天使用的最大内存值?
日志文件的名称是ansh.log
,它包含以下内容:
Timestamp ,xyz=1, abc=2, def=6 ,memory=64357890
Timestamp ,xyz=1 ,abc =2 , def =6 , memory=64987201
现在我想要最后一列 ( memory
) 的最高值。我在此日志文件中包含最近四天的日志行,因此它是非常大的文件。
答案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