首页 文章

如何在文件中输出本月创建的行数

提问于
浏览
-1

如何从本月创建的/ var / log输出或回显文件的行数,例如kern.log . 我听说过使用cat,date,grep和wc,但我有点困惑 .

任何答案都会有所帮助,但如果你能直接回答我,为什么不回答 .

顺便说一下,用bash脚本输出(.sh)

[编辑] cat /var/log/kern.log | grep'[^]'| wc -l ok,这已经输出了那个kern.log的行数,但是如何把日期设置为获取12月份的行数?

4 回答

  • 1

    要获取本月编写的行的行号,您需要基于文件的输出格式 .

    我们可以想象这些线条看起来像这样:

    Dec 23 22:15:14 ubunix kernel: [ 2320.727997] 8139too 0000:01:04.0: eth0: link down

    然后你只需要做一些事情:

    cat /var/log/kern.log | grep -E "^$(date +%b)" | wc -l
    

    date +%b 输出当月的缩减( Dec ) .

    但是,这只适用于像我的例子那样形成的行 . 您需要根据实际输出格式调整 grep 模式 . 在阅读 man date 之后,您可能会找出正确的 date 参数 .

  • 0

    使用GNU查找和GNU日期

    假设您使用logrotate之类的工具旋转日志,您可以跳过检查每一行的日期,只需检查日志文件本身的ctime . 例如,如果您每天午夜轮换日志,则可以使用GNU查找和GNU日期查找当月的文件 . 最棘手的部分是您需要以与未压缩日志不同的方式处理压缩日志 . 在以下代码中,这是使用Bash case语句完成的 .

    # Find current month with GNU Date
    current_month="$(date -d `date +%Y-%m`-01)"
    
    # Find files from current month.
    for file in $(find /var/log -type f -newerct "$current_month"); do
      echo -n "${file}: "
      case "$file" in
        *gz) zcat "$file" | wc -l ;;
          *) wc -l < "$file" ;;
      esac
    done
    
  • 1
    wc -l /var/log/<FileName>
    

    按照devnull的建议调查man wc . 我系统的输出如下 .

    parthiban@ubuntu:~$ wc /var/log/kern.log 
    5997  80017 580232 /var/log/kern.log
    parthiban@ubuntu:~$ wc -l /var/log/kern.log 
    5997 /var/log/kern.log
    
  • 1

    您现在仍然知道 /var/log/kern.log 中的日期格式,但是如果它以 Dec 5 之类的东西开头,那么您可以使用这个简单的 grep -c 来计算今天的行:

    > grep -c "^$(date '+%b ')" /var/log/kern.log
    912
    

相关问题