有没有人有一个脚本来计算包含特定单词的连续文件的数量?

Does anybody have a script that counts the number of consecutive files which contain a specific word?

任何资源或建议都会有所帮助,因为我在编写脚本方面很垃圾

所以,我需要走这条路:/home/client/data/storage/customer/data/2020/09/15

并检查是否有 5 个或更多连续文件包含单词“REJECTED”:

ls -ltr

-rw-rw-r-- 1 root root  5059 Sep 15 00:05 customer_rlt_20200915000514737_20200915000547948_8206b49d-b585-4360-8da0-e90b8081a399.zip
-rw-rw-r-- 1 root root  5023 Sep 15 00:06 customer_rlt_20200915000547619_20200915000635576_900b44dc-1cf4-4b1b-a04f-0fd963591e5f.zip
-rw-rw-r-- 1 root root 39856 Sep 15 00:09 customer_rlt_20200915000824108_20200915000908982_b87b01b3-a5dc-4a80-b19d-14f31ff667bc.zip
-rw-rw-r-- 1 root root 39719 Sep 15 00:09 customer_rlt_20200915000901688_20200915000938206_38261b59-8ebc-4f9f-9e2d-3e32eca3fd4d.zip
-rw-rw-r-- 1 root root 12829 Sep 15 00:13 customer_rlt_20200915001229811_20200915001334327_1667be2f-f1a7-41ae-b9ca-e7103d9abbf8.zip
-rw-rw-r-- 1 root root 12706 Sep 15 00:13 customer_rlt_20200915001333922_20200915001357405_609195c9-f23a-4984-936f-1a0903a35c07.zip

被拒绝的文件示例:

customer_rlt_20200513202515792_20200513202705506_5b8deae0-0405-413c-9a81-d1cc2171fa51REJECTED.zip

我目前拥有的:

!/bin/bash

YYYY=$(date +%Y);
MM=$(date +%m)
DD=$(date +%d)

#Set constants
CODE_OK=0
CODE_WARN=1
CODE_CRITICAL=2
CODE_UNKNOWN=3

#Set Default Values
FILE="/home/client/data/storage/customer/data/${YYYY}/${MM}/{DD}"

if [ ! -f $FILE ]
then
  echo "NO TRANSACTIONS FOUND"
  exit $CODE_CRITICAL
fi

您可以在 AWK 中快速完成一些事情:

$ cat consec.awk
/REJECTED/ {
    if (match_line == NR - 1) {
        consecutives++
    } else {
        consecutives = 1
    }
    if (consecutives == 5) {
        print "5 REJECTED"
        exit
    }
    match_line = NR
}
$ touch 1 2REJECTED 3REJECTED 5REJECTED 6REJECTED 7REJECTED 8
$ ls -1 | awk -f consec.awk
5 REJECTED
$ rm 3REJECTED; touch 3
$ ls -1 | awk -f consec.awk
$

这通过匹配包含 REJECTED 的行、计算连续行数(使用 match_line == NR - 1 进行检查,这意味着“最后匹配的行是前一行”)并打印“5 REJECTED”(如果连续行数为 5.

在此示例中,我使用 ls -1(注意数字 1,而不是字母 l)按文件名排序。您可以使用 ls -1rt(又是数字 1)按文件修改时间排序,就像您原来的 post.