AWK有条件地从文件中选择FQDN主机名

用户294110

我的专家在阅读了如何提供最小的可重现示例后再次来了,我再次提出问题。

我想过滤完全限定的主机名(例如:)dtc4028.ptc.db01.delta.com并计算单个主机上的重复次数。

以下是我的原始数据:

Feb 24 07:20:56 dbv0102 postfix/smtpd[29531]: NOQUEUE: reject: RCPT from dtc4023.ptc.db01.delta.com[172.10.10.161]: 554 5.7.1 <[email protected]>: Sender address rejected: Access denied; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<dtc4023.ptc.db01.delta.com>
Feb 24 07:21:20 dbv0102 postfix/smtpd[29528]: NOQUEUE: reject: RCPT from dtc4023.ptc.db01.delta.com[172.10.10.161]: 554 5.7.1 <[email protected]>: Sender address rejected: Access denied; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<dtc4023.ptc.db01.delta.com>
Feb 21 05:05:06 dbv0102 postfix/smtpd[32001]: disconnect from dtc4028.ptc.db01.delta.com[172.12.78.81]
Feb 21 05:05:23 dbv0102 postfix/smtpd[32010]: connect from dtc4028.ptc.db01.delta.com[172.12.78.81]
Feb 21 05:06:15 dbv0102 postfix/smtpd[31994]: connect from dtc3024.ptc.db01.delta.com[172.10.10.166]
Feb 21 05:06:15 dbv0102 postfix/smtpd[31994]: disconnect from dtc3024.ptc.db01.delta.com[172.10.10.166]
Feb 21 13:05:08 dbv0102 postfix/smtpd[29043]: lost connection after CONNECT from dtc4028.ptc.db01.delta.com[172.12.78.81]
Feb 21 13:05:08 dbv0102 postfix/smtpd[29048]: lost connection after CONNECT from dtc4028.ptc.db01.delta.com[172.12.78.82]

我自己尝试过的:

我在这里做什么,只取所需的专栏 1,2,4 and 8

$ awk '/from dtc/{print $1, $2, $4, $8}' maillog.log
Feb 24 dbv0102 RCPT
Feb 24 dbv0102 RCPT
Feb 21 dbv0102 dtc4028.ptc.db01.delta.com[172.12.78.81]
Feb 21 dbv0102 dtc4028.ptc.db01.delta.com[172.12.78.81]
Feb 21 dbv0102 dtc3024.ptc.db01.delta.com[172.10.10.166]
Feb 21 dbv0102 dtc3024.ptc.db01.delta.com[172.10.10.166]
Feb 21 dbv0102 after
Feb 21 dbv0102 after

其次,我删除RCPT|after了这些行因为它们没有主机名,然后也删除[]了仅包含主机名的主机,并计算了它们的引用次数。

$ awk '/from dtc/{print $1, $2, $4, $8}' maillog.log| egrep -v "RCPT|after" | awk '{print $4}'| cut -d"[" -f1 | uniq -c
      2 dtc4028.ptc.db01.delta.com
      2 dtc3024.ptc.db01.delta.com

我的愿望:

我希望如果可以使用awk本身更智能地编写它,而不是我正在用肮脏的方式编写它。

注意:我们能否仅获得dtc4028.ptc.db01.delta.com第6列之后的FQDN主机名

RavinderSingh13

根据您显示的示例,您可以尝试以下操作。用GNU编写和测试awk

awk '
match($0,/from .*com\[/){
  count[substr($0,RSTART+5,RLENGTH-6)]++
}
END{
  for(key in count){
    print count[key],key
  }
}
' Input_file

说明:在上面添加了详细说明。

awk '                                      ##Starting awk program from here.
match($0,/from .*com\[/){                  ##Using match function to match regex from .*com\[
  count[substr($0,RSTART+5,RLENGTH-6)]++   ##Whenever match is having a regex matched so it sets RSTART and RLENGTH, RSTART tells us starting point of matched regex and RLENGTH is complete length.
}
END{                                       ##Starting END block of this program from here.
  for(key in count){                       ##Traversing through count array here.
    print count[key],key                   ##Printing its key and value here.
  }
}
' Input_file                               ##Mentioning Input_file name here.

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Rails-有条件地记录特定的主机名

来自分类Dev

Ansible-根据泊坞窗模块中的清单文件有条件地设置音量和tls主机名

来自分类Dev

有条件地在R中选择多个列

来自分类Dev

有条件地从列决策中选择数据

来自分类Dev

有条件地选择模型

来自分类Dev

如何在主机文件中交换fqdn <->主机名

来自分类Dev

有条件地在iReport中选择一个列表节点?

来自分类Dev

LINQ有条件地从表中选择并返回多列作为单个列表

来自分类Dev

根据LastUpdatedStatusReport日期有条件地从WSUS服务器中选择字段

来自分类Dev

如何有条件地从不同表的两列中选择

来自分类Dev

有条件地从 dfs 列表中选择数据帧

来自分类Dev

有条件地在主机上执行,Ansible

来自分类Dev

grep / awk:有条件地排除单词

来自分类Dev

从带有条件联接的表中选择列

来自分类Dev

从有条件的映射表中选择不同的记录

来自分类Dev

选择Git时如何有条件地生成文件?

来自分类Dev

SQL语句有条件地选择相关记录

来自分类Dev

有条件地选择熊猫DataFrame中的数据

来自分类Dev

有条件地选择串行器

来自分类Dev

有条件地选择字段值

来自分类Dev

有条件地选择和设置列值

来自分类Dev

有条件地选择要继承的类

来自分类Dev

如何有条件地选择变量?

来自分类Dev

有条件地选择熊猫DataFrame中的数据

来自分类Dev

根据字段有条件地选择整个记录

来自分类Dev

有条件地在Angular中填充选择列表

来自分类Dev

如何有条件地从SQL Server选择记录

来自分类Dev

如何有条件地选择要显示的行

来自分类Dev

根据另一列中的数据有条件地从不同列中选择数据