在第4个Octet上解析数据

时间:2017-11-25 05:04:16

标签: awk dns analysis

我有超过1 GB的大文件。

它们包括每个记录3个字段(制表符分隔)。

Src IP (tab) Dst IP (tab) DNS query
1.1.1.1 (tab) 2.2.2.2 (tab) test.com
1.2.3.1 (tab) 1.2.3.4 (tab) test.com
1.2.4.1 (tab) 9.8.7.6 (tab) bing.com
1.1.1.2 (tab) 2.2.2.2 (tab) test.com
9.8.7.2 (tab) 2.2.2.2 (tab) test.com
3.3.3.2 (tab) 2.2.2.2 (tab) bing.com

我想使用AWK来计算和列出每个src IP的第4个八位字节的所有DNS查询。因此,上面的输出如下所示:

4th octet (tab) DNS query (tab) count
.1 (tab) test.com (tab) 2
.1 (tab) bing.com (tab) 1
.2 (tab) test.com (tab) 1
.2 (tab) bing.com (tab) 2

我不关心Src IP地址的第一个,第二个或第三个八位字节,也不关心Dest IP地址的任何部分。

仅查找所有DNS查询的列表,每4个字节的Src IP计数。

FWIW

3 个答案:

答案 0 :(得分:1)

awk

awk  '{split($1,a,"."); c[a[4] "\t" $3]++}
  END {for (i in c) print "." i "\t" c[i]}' file

此外,您可以将输出传输到sort,以便按字段(-n)按字母或数字(-k)排序。

输入

1.1.1.1     2.2.2.2     test.com
1.2.3.1     1.2.3.4     test.com
1.2.4.1     9.8.7.6     bing.com
1.1.1.2     2.2.2.2     test.com
9.8.7.2     2.2.2.2     test.com
3.3.3.2     2.2.2.2     bing.com

输出

.1      bing.com        1
.1      test.com        2
.2      bing.com        1
.2      test.com        2

答案 1 :(得分:0)

你可以试试这个awk和uniq的管道

awk -F'\t|\.' '{print "\t."$4"\t"$9"."$10}' infile | uniq -c | awk -F'\t' '{gsub(" ","",$1);print $2FS$3FS$1}'

答案 2 :(得分:0)

如果输入文件中有回车符,则必须在通过awk处理之前将其删除: -

tr -d '\r' < file | awk '
        NR > 1 {
                I = $1
                sub ( /.*\./, ".", I )
                ++A[I OFS $3]
        }
        END {
                for ( k in A )
                        print k, A[k]
        }
' OFS='\t'