根据内容排序日志文件

时间:2014-09-30 17:35:21

标签: bash sorting

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

P029387.log 

在每个日志文件中,都有一个共同的字符串:“操作次数”,例如:

total access time is 321 seconds

我想写一个bash命令,它将输出每个文件中找到的上述字符串,加上文件名本身,例如:

"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"

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

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