文件中的行操作,bash

Row manipulation in files, bash

我有一个名为 SSH 的文件,其中包含两行信息。它看起来像这样:

src=192.168.60.111 ttl: 64 last_seen: 4295187854 oldest_pkt: 16 4295157111, 4295168442, 4295172078, 4295172078, 4295172328, 4295172328, 4295172829, 4295172829, 4295173830, 4295173830, 4295175834, 4295175834, 4295179838, 4295179838, 4295187854, 4295187854
src=10.0.98.2 ttl: 64 last_seen: 4295868429 oldest_pkt: 16 4295845135, 4295848540, 4295851694, 4295851694, 4295853197, 4295853197, 4295856201, 4295856201, 4295859226, 4295859226, 4295862420, 4295862420, 4295865425, 4295865425, 4295868429, 4295868429

我想制作一个脚本来控制天气 last_seen 数量 + 发送的数据包数量 * 10 小于当前时间。
例如:if($currenttime >= 4295187854+16*10) 对于第一行。
如果当前时间较大,则应删除该行。 这是尝试通过 SSH 延迟登录,SSH 文件记录了每个输入错误密码超过 3 次的 IP。

我对脚本编写还很陌生,尝试用 awk 解决这个问题,但没有取得任何进展。你们知道我如何逐行扫描文件、分析不同的字段并根据 if 语句的答案删除它吗?

编辑 这是我制作的,这可能没有任何意义,因为我无法理解 awk 的实际情况。

#!/bin/sh
currenttime=$(date +%s)
awk  '{if ($currenttime >= +10*) print [=12=] > "temp.txt";}' SSH
cp -f temp.txt SSH
rm temp.txt

是这样的吗?:

$ awk 'strftime("%s")<=+*10' SSH

strftime("%s") returns 自纪元 以来以秒为单位的十进制时间戳,与 +*10 进行比较。如果比较 true 则打印记录。

编辑:感谢@EdMorton 指出并非所有系统都支持 %s 说明符(请参阅 Gnu awk documentation 上的问题) 并且在那些不受支持的系统上应该使用 systime() 代替(它更短所以无论如何都在所有系统上使用它!):

awk 'systime()<=+*10' SSH