shell脚本_统计a文件中的行在15分钟内连续出现3次的次数

蛋蛋 2024年03月27日 59 0

需求:统计a文件中的行在15分钟内连续出现3次的次数

# cat a
2024-03-12 04:44:00
2024-03-12 04:50:00
2024-03-12 04:57:00
2024-03-12 04:59:00
2024-03-12 10:24:00
2024-03-12 10:27:00
2024-03-12 10:38:00
2024-03-12 11:12:00
2024-03-12 13:43:00
2024-03-12 13:48:00
2024-03-12 14:09:00
2024-03-12 14:16:00
2024-03-12 14:25:00
2024-03-12 14:44:00
2024-03-12 15:28:00
2024-03-12 15:59:00
2024-03-12 16:04:00
2024-03-12 16:41:00
2024-03-12 17:05:00
2024-03-12 17:18:00
2024-03-12 19:36:00
2024-03-12 19:37:00
2024-03-12 19:52:00
2024-03-12 20:01:00
2024-03-12 20:04:00
2024-03-12 20:58:00
2024-03-12 21:06:00
2024-03-12 21:08:00
2024-03-12 21:09:00
2024-03-12 21:12:00
2024-03-12 21:14:00
2024-03-12 21:16:00
2024-03-12 21:23:00
2024-03-12 21:34:00
2024-03-12 21:42:00
2024-03-12 22:02:00
2024-03-12 22:04:00
2024-03-12 22:20:00
2024-03-12 22:58:00
2024-03-12 23:22:00

对应脚本如下:

# cat cs.sh
#!/bin/bash
debug=0
[ "$1"X == "1"X ] && debug=1

# 将输入数字序列存储到数组中
data=(`cat a | sed 's/-/ /g;s/:/ /g' | awk '{print mktime($1" "$2" "$3" "$4" "$5" "$6)}'`)

# 定义一个变量来记录结果数
result=0

# 从数组索引0开始遍历
if [ ${#data[@]} -gt 2 ];then
	for (( i=0; $i < ${#data[@]}; i++ ));
	do
		# 调试使用
		[ $debug == 1 ] && echo "i = $i"
		diff=0
		for (( j=$i+2; j < ${#data[@]}; j++ ));
		do
			# 调试使用
			[ $debug == 1 ] && echo "j = $j"
			diff=$((${data[j]} - ${data[j-2]}))
			# 调试使用
			[ $debug == 1 ] && echo "$((j + 1 )) - $((j - 1)) : `date -d @${data[j]} +'%Y-%m-%d_%H:%M:%S'` - `date -d @${data[j-2]} +'%Y-%m-%d_%H:%M:%S'` = $diff"
			if [ $diff -gt 900 ]; then
				j=$((j - 1))
				break
			elif [ $diff -eq 900 ]; then
				break
			fi
		done
		[ $debug == 1 ] && [ $j -lt ${#data[@]} ] && [ $((j - i)) -gt 1 ] && { echo "$j - $i  `date -d @${data[j]} +'%Y-%m-%d_%H:%M:%S'`"; result=$((result + 1)); }
		[ $debug == 0 ] && [ $j -lt ${#data[@]} ] && [ $((j - i)) -gt 1 ] && { echo `date -d @${data[j]} +'%Y-%m-%d_%H:%M:%S'`; result=$((result + 1)); }
		i=$j
	done
	echo "记录的数量为: $result"
fi

执行效果:

# sh cs.sh
2024-03-12_04:59:00
2024-03-12_10:38:00
2024-03-12_21:23:00
记录的数量为: 3

调试输出:

# sh cs.sh 1
i = 0
j = 2
3 - 1 : 2024-03-12_04:57:00 - 2024-03-12_04:44:00 = 780
j = 3
4 - 2 : 2024-03-12_04:59:00 - 2024-03-12_04:50:00 = 540
j = 4
5 - 3 : 2024-03-12_10:24:00 - 2024-03-12_04:57:00 = 19620
3 - 0  2024-03-12_04:59:00
i = 4
j = 6
7 - 5 : 2024-03-12_10:38:00 - 2024-03-12_10:24:00 = 840
j = 7
8 - 6 : 2024-03-12_11:12:00 - 2024-03-12_10:27:00 = 2700
6 - 4  2024-03-12_10:38:00
i = 7
j = 9
10 - 8 : 2024-03-12_13:48:00 - 2024-03-12_11:12:00 = 9360
i = 9
j = 11
12 - 10 : 2024-03-12_14:16:00 - 2024-03-12_13:48:00 = 1680
i = 11
j = 13
14 - 12 : 2024-03-12_14:44:00 - 2024-03-12_14:16:00 = 1680
i = 13
j = 15
16 - 14 : 2024-03-12_15:59:00 - 2024-03-12_14:44:00 = 4500
i = 15
j = 17
18 - 16 : 2024-03-12_16:41:00 - 2024-03-12_15:59:00 = 2520
i = 17
j = 19
20 - 18 : 2024-03-12_17:18:00 - 2024-03-12_16:41:00 = 2220
i = 19
j = 21
22 - 20 : 2024-03-12_19:37:00 - 2024-03-12_17:18:00 = 8340
i = 21
j = 23
24 - 22 : 2024-03-12_20:01:00 - 2024-03-12_19:37:00 = 1440
i = 23
j = 25
26 - 24 : 2024-03-12_20:58:00 - 2024-03-12_20:01:00 = 3420
i = 25
j = 27
28 - 26 : 2024-03-12_21:08:00 - 2024-03-12_20:58:00 = 600
j = 28
29 - 27 : 2024-03-12_21:09:00 - 2024-03-12_21:06:00 = 180
j = 29
30 - 28 : 2024-03-12_21:12:00 - 2024-03-12_21:08:00 = 240
j = 30
31 - 29 : 2024-03-12_21:14:00 - 2024-03-12_21:09:00 = 300
j = 31
32 - 30 : 2024-03-12_21:16:00 - 2024-03-12_21:12:00 = 240
j = 32
33 - 31 : 2024-03-12_21:23:00 - 2024-03-12_21:14:00 = 540
j = 33
34 - 32 : 2024-03-12_21:34:00 - 2024-03-12_21:16:00 = 1080
32 - 25  2024-03-12_21:23:00
i = 33
j = 35
36 - 34 : 2024-03-12_22:02:00 - 2024-03-12_21:34:00 = 1680
i = 35
j = 37
38 - 36 : 2024-03-12_22:20:00 - 2024-03-12_22:02:00 = 1080
i = 37
j = 39
40 - 38 : 2024-03-12_23:22:00 - 2024-03-12_22:20:00 = 3720
i = 39
记录的数量为: 3
Last Updated: 2024/03/27 21:30:13
[转]charles下载安装教程详细 [DM] 错误号-2665 记录超长