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

时间:2013-12-05 09:34:49

标签: bash shell

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

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

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

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

4 个答案:

答案 0 :(得分: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模式。阅读date后,您可能会找出正确的man date参数。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

使用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

答案 3 :(得分:0)

wc -l /var/log/<FileName>

按照devnull的建议调查男人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