按时间(反向)排序grep结果的简单方法?

时间:2016-06-28 07:28:04

标签: grep ksh aix

我经常需要在 的大量日志文件中查找特定字符串。关于我必须滚动的内容,我得到了很多结果。

今天,grep的结果按字母顺序列出结果。我希望我的grep结果按时间顺序颠倒,就像 ls -ltr 那样。

我知道我可以按文件获取ls -ltr和grep文件的结果。我是这样做的:

 ls -ltr ${my_log_dir}\* | awk '{print $9}' |xargs grep ${my_pattern}

但我想知道:有更简单的方法吗?

PS:我在ksh使用AIX

2 个答案:

答案 0 :(得分:2)

我找到的解决方案(感谢Fedorqui)只是使用ls -tr。它假设结果以正确的顺序通过|传递给xargs,然后允许执行grep

我的误解是,因为当我使用ls时,结果不是作为单个列列表而是作为多列列表而来,它不能作为xargs的输入。

这是迄今为止最简单的解决方案,因为它避免了任何awk解析:

ls -tr ${my_log_dir}\* | xargs grep ${my_pattern}

我查了一下,ls -t的每个结果都会传递给xargs,即使它们看起来不像我预期的那样会很容易进入其中:

srv:/papi/tata $ ls -t
addl      ieet      rrri     
ooij      lllr      sss      
srv:/papi/tata $ ls -t |xargs -I{} echo {}
addl 
ieet  
rrri     
ooij  
lllr  
sss

答案 1 :(得分:1)

这也可以使用find命令: -

find -type f -print0 | xargs -r0 stat -c %y\ %n | sort -r | awk '{print $4}' | sed "s|^\./||"
  • -print0在find中保留具有特殊字符(空格,制表符)的文件
  • 打印文件状态(stat %y(上次修改时间)和%n(%n文件名),输出具有新分隔(-c)< / LI>
  • 反向排序上一个命令的输出。 (-r反向)
  • awk '{print $4}'仅打印文件名(可根据需要进行优化)
  • 从文件名中删除前导./