我想根据所有文件中存在的一些常见内容对文件名(日志文件)进行排序。每个日志文件以“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"
感谢您的帮助。
答案 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