Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 计算过去7天内文件中发生的事件数_Linux_Bash_Shell_Grep - Fatal编程技术网

Linux 计算过去7天内文件中发生的事件数

Linux 计算过去7天内文件中发生的事件数,linux,bash,shell,grep,Linux,Bash,Shell,Grep,输入: cat log.txt 2021-01-15 00:00:14: Installing hotfix ... 2021-01-15 00:02:07: Hotfix successfully installed! 2021-01-15 00:02:07: Finished 2021-02-07 00:00:14: Installing hotfix ... 2021-02-07 00:02:07: Hotfix successfully installed! 2021-02-07 00

输入:

cat log.txt

2021-01-15 00:00:14: Installing hotfix ...
2021-01-15 00:02:07: Hotfix successfully installed!
2021-01-15 00:02:07: Finished
2021-02-07 00:00:14: Installing hotfix ...
2021-02-07 00:02:07: Hotfix successfully installed!
2021-02-07 00:02:07: Finished
2021-02-08 12:00:14: Started - Looking for available hotfixes ...
2021-02-08 12:00:14: Updating the hotfix list
2021-02-08 12:00:14: Finished
cat file.txt
1
我想创建一个每日cronjob,用安装的单词
的出现次数更新
文件.txt
,但仅在过去7天内更新。因此,每当我阅读
file.txt
时,它都应该包含过去7天内安装的修补程序的数量

当前日期:
2021-02-08

输出:

cat log.txt

2021-01-15 00:00:14: Installing hotfix ...
2021-01-15 00:02:07: Hotfix successfully installed!
2021-01-15 00:02:07: Finished
2021-02-07 00:00:14: Installing hotfix ...
2021-02-07 00:02:07: Hotfix successfully installed!
2021-02-07 00:02:07: Finished
2021-02-08 12:00:14: Started - Looking for available hotfixes ...
2021-02-08 12:00:14: Updating the hotfix list
2021-02-08 12:00:14: Finished
cat file.txt
1

我知道我可以使用
grep-c“installed”log.txt来统计日志文件中的所有事件。但是我如何修改它,使grep只统计过去7天的事件?日期总是会改变,因为每天都会添加新行,所以我不能在grep脚本中提供固定日期。此外,在给定的一天中可能会出现多个
安装的
,因此我无法按行号进行grep。

使用GNU coreutils和plain
bash的
日期

awk -v d="$(date -d "7 days ago" "+%F")" '$1 > d && /installed/{c++}END{print c}' log.txt >file.txt
#!/bin/bash

linecount=0
weekago=$(date -d "-7 days" +%F)
while read -r line; do
        [[ $line > $weekago ]] && [[ $line = *installed* ]] && ((++linecount))
done < log.txt
echo $linecount > file.txt
#/bin/bash
行数=0
weekago=$(日期-d“-7天”+%F)
而read-r行;做
[[$line>$weekago]]&&[$line=*已安装*]&&(++linecount))
完成file.txt

为了更好地理解您的问题,请您发布更清晰的输入和预期输出示例。对不起,我对awk的理解很差。如果输出文件是
file.txt
,如何指定输入文件
log.txt
?我需要在awk之前
cat
it吗?@Bogdan更新。这就像一个符咒。非常感谢。