Bash 根据日志文件的内容对日志文件进行排序

Bash 根据日志文件的内容对日志文件进行排序,bash,sorting,Bash,Sorting,我想根据所有文件中存在的一些常见内容对文件名(日志文件)进行排序。每个日志文件以“p”开头,后跟一些数字,以“.log”结尾。例如: P029387.log 在每个日志文件中,都有一个公共字符串:“操作计数为”,例如: total access time is 321 seconds 我想编写一个bash命令,输出每个文件中的上述字符串,以及文件名本身,例如: total access time is 321 seconds "total access time is 267 secon

我想根据所有文件中存在的一些常见内容对文件名(日志文件)进行排序。每个日志文件以“p”开头,后跟一些数字,以“.log”结尾。例如:

P029387.log 
在每个日志文件中,都有一个公共字符串:“操作计数为”,例如:

total access time is 321 seconds
我想编写一个bash命令,输出每个文件中的上述字符串,以及文件名本身,例如:

total access time is 321 seconds
"total access time is 267 seconds"  P110234.log
"total access time is 47 seconds"   P202931.log
"total access time is 55 seconds"   P239871.log
到目前为止,我已经能够对日志文件的内容进行排序,但无法打印它们的文件名:

find . -name p*.log -exec grep "count of operations is “ {} \; |sort -n –k5
但输出仅限于:

"total access time is 267 seconds"
"total access time is 47 seconds"
"total access time is 55 seconds"

谢谢您的帮助。

如果您不关心确切的格式,那么只需:

grep 'total access time is ' P*.log
如果不是默认值(或在默认参数/别名中禁用),则可能使用
-H
,将获得:

P110234.log:"total access time is 267 seconds"
P202931.log:"total access time is 47 seconds"
P239871.log:"total access time is 55 seconds"
如果您确实想要精确的输出,那么使用以下内容可能是最简单的:

awk '/total access time is /{print $0,FILENAME}' P*.log
或对于偶数列间距:

awk '/total access time is /{print $0"\t"FILENAME}' P*.log | column -t

使用选项
grep-H
打印文件名:

find . -name p*.log -exec grep -H "count of operations is “ {} \; |sort -n –k5