gpt4 book ai didi

AWK 子记录(记录中的记录)

转载 作者:行者123 更新时间:2023-12-02 08:32:48 25 4
gpt4 key购买 nike

在 awk 中处理记录内部记录的最佳方式是什么?

我有以

开头的记录
Network: 125
<junk data>
MAC: AA:AA:AA:AA:AA:AA
Packets: 5125
<junk data>
Client: 1
<junk data>
MAC: 30:85:a9:b0:ec:c4
Packets: 942
<junk data>
Client: 2
<junk data>
MAC: 30:85:a9:b0:ec:fa
Packets: 1052
<junk data>
<junk data>
Network: 126
...

预期输出

---------------------------
Network: 125
Client: 30:85:a9:b0:ec:c4
Packets: 942
---------------------------

---------------------------
Network: 125
Client: 30:85:a9:b0:ec:fa
Packets: 1052
---------------------------

注意:输出不能包含来自网络主体本身的任何数据,例如 MAC:AA:AA:AA:AA:AA:AA。

首先我要设置

{ RS = "网络";全系统 = "\n"} 然后进行一些条件匹配,然后我必须检查客户端子记录并进行一些条件匹配,如果匹配,则只打印出该内部记录中的某些字段。

awk中有RSS“分录”功能吗?

awk 的 ~32000 字段 NF 限制也有问题。我要处理的数据远不止这些。

谢谢!

最佳答案

我认为这可以满足您的需求:

awk 'BEGIN { FS=OFS=": "; hr="----------------" }
!h {print hr; h=1}
/Network/ {n=$2}
/Client/ {c=1}
c && /MAC/ {m=$2}
c && /Packets/ {p=$2}
m && p {
print "Network", n
print "Client", m
print "Packets", p
print hr "\n"
m=c=p=h=""
}' input
  • h标志为假时,打印水平线。
  • 将网络保存到 n
  • 只有在客户端内时才将客户端标志设置为 true
  • 将客户端 MAC 保存到 m
  • 将数据包保存到p
  • mp 设置时,打印输出并取消设置标志。

输出:

----------------
Network: 125
Client: 30:85:a9:b0:ec:c4
Packets: 942
----------------

----------------
Network: 125
Client: 30:85:a9:b0:ec:fa
Packets: 1052
----------------

这适用于您显示的输入,但如果 Name: Value 之间的空格数可能不同,您可能需要更改字段分隔符 FS="[[: space:]]*:[[:space:]]+"(零个或多个空格字符,一个冒号,然后是一个或多个空格字符)。由于MAC地址也包含冒号,此时字段分隔符必须至少包含一个空格。如果这是一个问题,请告诉我。

关于AWK 子记录(记录中的记录),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25010977/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com