perl - 查找重复项并在匹配时执行脚本

标签 perl bash grep

我正在尝试创建一个脚本来解析日志文件并查找每行特定部分的重复匹配项,如果存在重复项,我需要在与重复项匹配的第一行上执行脚本。我的日志详细信息是:

#: 177          101 User 1 Channel: SIP/101
#: 178          117 User 2 Channel: SIP/117
#: 179          150 User 3 Channel: SIP/150
#: 356          166 User 4 Channel: SIP/166
#: 387          117 User 2 Channel: SIP/117

我想根据日志文件的 SIP/部分查找重复项,但我需要根据日志文件的 # 部分执行脚本。根据此日志,我需要执行 #: 178 行的脚本。

到目前为止我已经使用

egrep -o ".{50}SIP.{4}"

根据线路的 SIP/部分查找重复项。我不清楚如何才能获得整行来获取 #: 178 并生成要执行的脚本。

最佳答案

一次性解决方案。它利用 uniq 支持跳过字段和仅重复标志

sed -n '/SIP/{s/^#:\s\+\([0-9]\+\).*SIP\/\([0-9]\+\)/\1 \2/;p}' file.txt | sort -k2,2 -n | uniq -f 1 -d | cut -f1 -d ' '

关于perl - 查找重复项并在匹配时执行脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12754160/

相关文章:

关于 "undefined subroutine"的 Perl 模块错误

perl - 无法使用 Dancer::Plugin::Database 连接到多个数据库

linux - 在 IF ELIF 语句中执行一系列外部/第三方程序

python - 在 Python 字符串(不是文件)中查找一行

eclipse - 自动化 Tomcat 添加到 Eclipse

bash - 将带符号的 10 位二进制数转换为十进制数?

Bash 中的正则表达式 : not wanting to include directories

regex - 在 grep 中使用星号

command-line - 从 grep 中删除行号选项

python - 在 Python 中解压格式字符