1

我写了一个脚本来打印日志文件的特定日期!脚本工作正常,但我用while read 行编写了循环部分, 日志文件包含超过 150000 个项目!脚本想要逐行阅读它需要几个小时!所以,应该以某种方式更改时间!我在 {1..N} 中了解我,但我想要更好的东西,适用于任何日志文件。

你有什么建议?

4

1 回答 1

1

你必须向我们展示你在做什么。while请编辑您的帖子以包含说明您的问题的循环代码的最小子集。还请显示任何错误或警告消息的确切文本。

根据您的评论“......我应该按回车键读取每一行”。你肯定做错了什么。阅读每一行应该是自动的。这是使用 bash 处理文件的基本概述。

你会考虑使用awk吗?我可以使用该标准工具发布更好的解决方案。

 inputFiles="${@}"
 cat "${inputFiles}"\
 | while read line ; do
     case ${line} in
        2[0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9]* ) 
            # matched date
             print ${line}
        ;;
        * )
            # you'll need to add other reg-expes here to extract data you want
        ;;
      esac
 done

您可能必须删除${inputFiles}.

使用的目的cat ${inputfiles | while read line ...是允许处理您在 cmdline 上列出的任何文件。

您是否尝试过grep查看日志文件?

 date1='2011-09-11' ; date2='2011-09-12'; date3='2011-09-13'
 grep "${date1}|${date2}|${date3}" *.logFiles | grep -i error

您还可以在上面的 while 循环中使用 date1... 作为案例目标​​。

 case ${line} in
   ${date1}*|${date2}*|${date3}* )
      echo $line
   ;;
 esac

您可以删除*上面的 ' ,或者如果日期不是该行中的第一个元素,您可能需要*在每个${dateN}.

或者,如果您要压缩日志文件,

 gunzip -c ${zippedLogFiles_gz) | grep "${date1}|${date2}|${date3}" | grep -i error

通常是一个很好的起点(并且仅将文件解压缩到位(仅将未压缩的输出发送到管道中))。

PS,因为您似乎是新用户,如果您得到的答案对您有帮助,请记住将其标记为已接受,和/或给它一个 +(或 -)作为有用的答案。

于 2011-09-29T02:07:45.457 回答