我有这个绑定 dns 统计文本文件,
sample_data.txt
:
+++ Statistics Dump +++ (1698804161)
++ Incoming Requests ++
34199522 QUERY
2 STATUS
12 UPDATE
++ Incoming Queries ++
2 RESERVED0
19539834 A
203203 NS
239215 CNAME
25636 SOA
235650 PTR
96 HINFO
922800 MX
616897 TXT
5 RP
13 AFSDB
8 SIG
7 KEY
9112095 AAAA
15 LOC
18 EID
339894 SRV
75 NAPTR
7 KX
11 CERT
232 A6
55 DNAME
5 APL
2172 DS
14 SSHFP
6 IPSECKEY
35 RRSIG
183 NSEC
135429 DNSKEY
3 DHCID
8 NSEC3
6 NSEC3PARAM
196 TLSA
27 TYPE53
21 HIP
28 TYPE59
20 TYPE60
28 TYPE61
3 TYPE62
73 TYPE63
156 TYPE64
2815625 TYPE65
2297 SPF
7 TYPE108
11 TYPE109
752 AXFR
1115 ANY
4 DLV
5530 Others
++ Outgoing Queries ++
[View: default]
[View: _bind]
++ Name Server Statistics ++
34199536 IPv4 requests received
33035183 requests with EDNS(0) received
1433 requests with TSIG received
74232 TCP requests received
20645922 auth queries rejected
4604 recursive queries rejected
730 transfer requests rejected
12 update requests rejected
34199536 responses sent
71843 truncated responses sent
33035183 responses with EDNS(0) sent
1433 responses with TSIG sent
24625387 queries resulted in successful answer
33852582 queries resulted in authoritative answer
135913 queries resulted in non authoritative answer
135913 queries resulted in referral answer
3911181 queries resulted in nxrrset
2 queries resulted in SERVFAIL
5316014 queries resulted in NXDOMAIN
210273 other query failures
++ Zone Maintenance Statistics ++
234 IPv4 notifies sent
++ Resolver Statistics ++
[Common]
[View: default]
[View: _bind]
++ Cache DB RRsets ++
[View: default]
[View: _bind (Cache: _bind)]
++ Socket I/O Statistics ++
27 UDP/IPv4 sockets opened
3 TCP/IPv4 sockets opened
25 UDP/IPv4 sockets closed
74330 TCP/IPv4 sockets closed
74338 TCP/IPv4 connections accepted
42 TCP/IPv4 recv errors
++ Per Zone Query Statistics ++
[sampledomain1.com]
1898118 auth queries rejected
77 recursive queries rejected
16 transfer requests rejected
12 update requests rejected
5125667 queries resulted in successful answer
10890351 queries resulted in authoritative answer
79163 queries resulted in non authoritative answer
79163 queries resulted in referral answer
2997088 queries resulted in nxrrset
2767596 queries resulted in NXDOMAIN
[sampledomain2.com]
18026742 auth queries rejected
1945 recursive queries rejected
10 transfer requests rejected
18773892 queries resulted in successful answer
20863228 queries resulted in authoritative answer
56644 queries resulted in non authoritative answer
56644 queries resulted in referral answer
778332 queries resulted in nxrrset
1311004 queries resulted in NXDOMAIN
--- Statistics Dump --- (1698804161)
我想做的是使用 awk 捕获每个
[anydomainname]
记录分隔符之间的文本块(不包括它),并将该块输出到新文件。因此,新文件 file1.txt 和 file2.txt 将包含:
文件1.txt
1898118 auth queries rejected
77 recursive queries rejected
16 transfer requests rejected
12 update requests rejected
5125667 queries resulted in successful answer
10890351 queries resulted in authoritative answer
79163 queries resulted in non authoritative answer
79163 queries resulted in referral answer
2997088 queries resulted in nxrrset
2767596 queries resulted in NXDOMAIN
文件2.txt
18026742 auth queries rejected
1945 recursive queries rejected
10 transfer requests rejected
18773892 queries resulted in successful answer
20863228 queries resulted in authoritative answer
56644 queries resulted in non authoritative answer
56644 queries resulted in referral answer
778332 queries resulted in nxrrset
1311004 queries resulted in NXDOMAIN
分别。
现在,这就是我正在做的事情:
awk '/^\[[[:lower:]]/ {p=1; next};
/^\[[[:lower:]]/ {p=0};
{if (p==1) {print last} {last=$0}}' sample_data.txt | tail -n+2
这让我明白了:
1898118 auth queries rejected
77 recursive queries rejected
16 transfer requests rejected
12 update requests rejected
5125667 queries resulted in successful answer
10890351 queries resulted in authoritative answer
79163 queries resulted in non authoritative answer
79163 queries resulted in referral answer
2997088 queries resulted in nxrrset
2767596 queries resulted in NXDOMAIN
18026742 auth queries rejected
1945 recursive queries rejected
10 transfer requests rejected
18773892 queries resulted in successful answer
20863228 queries resulted in authoritative answer
56644 queries resulted in non authoritative answer
56644 queries resulted in referral answer
778332 queries resulted in nxrrset
1311004 queries resulted in NXDOMAIN
但正如你所看到的,我有两个问题。
我可以通过扩展当前的 awk 命令,使用
BEGIN
和 for
条件,然后为每个块打印到文件来完成此操作吗?我现在只是知道我是否可以用 awk 来做到这一点,因为我正在考虑。短暂性脑缺血发作。
这个
awk
应该适合你:
awk '
/^\[[[:lower:]]/ {
fn = "file" ++f ".txt"
next
}
/^[^[:blank:]]/ {
fn = ""
}
fn {
print > fn
}' file