我正在运行以下命令来扫描日志文件并打印出包含我指定的模式的行。在打印出的行的末尾,此代码行还提供了输出末尾的行数(具有模式)。
awk 'BEGIN{count=0} /error/ && /database/ {print ; count++ } END { print count }' ${LOGFILE}
日志文件的内容类似于以下内容:
Sep 25 20:18:21 accountsd[377]: notify name LTNCY=200 "SYDRemotePreferencesSourceDidChangeExternally" has been registered 120 times - this may be a leak
Sep 25 20:18:21 accountsd[377]: notify name LTNCY=200 "com.apple.syncdefaultsd.daemon.wake" has been registered 120 times - this may be a leak
我遇到的麻烦是,我有一个新情况需要考虑。
LTNCY=
LTNCY
模式的行数计数LTNCY
的所有值我了解到了:
awk 'BEGIN{count=0} /notify.*LTNCY=/ && /may be a leak/ {print ; count++ } END { print count }' ${LOGFILE}
我知道将需要使用以下命令的变体:
awk '{sum+=$1} END {print sum}'
但是我在将所有内容组合成一个awk命令时遇到了麻烦。
答案 0 :(得分:3)
请您尝试以下。
awk '
/LTNCY/{
count++
match($0,/LTNCY=[^ ]*/)
sum+=substr($0,RSTART+6,RLENGTH-6)+0
}
END{
print "Sum of LTNCY value is:" sum ORS "Total count of LTYNCY is:" count ORS "Their divide is:" sum/count
}
' Input_file