这种按模式过滤的awk有什么问题?

  • 本文关键字:问题 awk 模式 过滤 awk
  • 更新时间 :
  • 英文 :


我有这个文件tes2

Topic:AURA.REP.JSON PartitionCount:1 ReplicationFactor:2 Configs:
Topic:AUX-SPS-WAVN.OPERATIONS PartitionCount:1 ReplicationFactor:2     Configs:min.insync.replicas=2,delete.retention.ms=86400000,retention.bytes=-1  
Topic:AUX-SPS-WAVN.OPERATIONS-DESA PartitionCount:3 ReplicationFactor:3 Configs:retention.ms=172800000
Topic:AUX-SPS-WAVN.ORPHAN-PUPPSS PartitionCount:1 ReplicationFactor:2 Configs:min.insync.replicas=2,delete.retention.ms=86400000,retention.bytes=-1
Topic:AUX-SPS-WAVN.ORPHAN-PUPPSS-DESA PartitionCount:3 ReplicationFactor:3 Configs:retention.ms=172800000
Topic:AUX-SPS-WAVN.ORPHAN-PUSRCI PartitionCount:1 ReplicationFactor:2 Configs:min.insync.replicas=2,delete.retention.ms=86400000,retention.bytes=-1
Topic:AUX-SPS-WAVN.ORPHAN-PUSRCI-DESA PartitionCount:3 ReplicationFactor:3 Configs:retention.ms=172800000
Topic:AUX-SPS-WAVN.ORPHAN-PUSUBP PartitionCount:1 ReplicationFactor:2 Configs:min.insync.replicas=2,delete.retention.ms=86400000,retention.bytes=-1
Topic:AUX-SPS-WAVN.ORPHAN-PUSUBP-DESA PartitionCount:3 ReplicationFactor:3 Configs:retention.ms=172800000
Topic:service_check_result PartitionCount:6 ReplicationFactor:1 Configs:cleanup.policy=delete,max.message.bytes=1000012,min.insync.replicas=1,retention.ms=604800000,delete.retention.ms=86400000,retention.bytes=-1
....

我想按以下方式过滤:主题,分区计数,min.insync.replicas,cleanup.policy,retention.ms,max.message.bytes,retention.bytes

我正在使用以下代码:

awk '
match($0,/Topic:[^ ]*/){
topic=substr($0,RSTART+6,RLENGTH-6)
match($0,/PartitionCount:[^ ]*/)
partition=substr($0,RSTART+15,RLENGTH-15)
match($0,/min.insync.replicas[^,]*/)
mininsync=substr($0,RSTART+20,RLENGTH-20)
match($0,/cleanup.policy[^,]*/)
cleanup=substr($0,RSTART+15,RLENGTH-15)
match($0,/retention.ms[^,]*/)
retention=substr($0,RSTART+13,RLENGTH-13)
match ($0,/max.message.bytes[^,]*/)
maxmessage=substr($0,RSTART+18,RLENGTH-18)
match ($0,/retention.bytes[^,]*/)
retentionbytes=substr($0,RSTART+16,RLENGTH-16)
print 
topic",",partition",",mininsync",",cleanup",",retention",",maxmessage",",retentionbytes 
topic=""
}
' test2

但我得到:

AURA.REP.JSON, 1, , , , , 
AUX-SPS-WAVN.OPERATIONS, 1, 2, , 86400000, , -1
, , SPS-WAVN.OPERATIONS-DESA, 3, , , 172800000
AUX-SPS-WAVN.ORPHAN-PUPPSS, 1, 2, , 86400000, , -1
, , SPS-WAVN.ORPHAN-PUPPSS-DESA, 3, , , 172800000
AUX-SPS-WAVN.ORPHAN-PUSRCI, 1, 2, , 86400000, , -1
, , SPS-WAVN.ORPHAN-PUSRCI-DESA, 3, , , 172800000
AUX-SPS-WAVN.ORPHAN-PUSUBP, 1, 2, , 86400000, , -1
, , SPS-WAVN.ORPHAN-PUSUBP-DESA, 3, , , 172800000

我不知道为什么。

谢谢

您有一个表单为:

key1:value1 key2:value2 key3:value3

其中一个值的形式为:

key1=value1,key2=value2,key3=value3

使用此答案,我们可以编写以下代码:

awk '
function str2map(str,fs1,fs2,map,   n,tmp) {
n=split(str,map,fs1)
for (;n>0;n--) { 
split(map[n],tmp,fs2);
map[tmp[1]]=tmp[2]; map[tmp[1],"full"]=map[n]
delete map[n]
}
}
BEGIN{OFS=","}
{ str2map($0," ",":",map_main) }
{ str2map(map_main["Configs"],",","=",map_config) }
{ print map_main["Topic"], map_main["PartitionCount"],                      
map_config["min.insync.replicas"], map_config["cleanup.policy"],    
map_config["delete.retention.ms"], map_config["max.message.bytes"], 
map_config["retention.bytes"]
}' file

这将创建以下输出:

AURA.REP.JSON,1,,,,,
AUX-SPS-WAVN.OPERATIONS,1,2,,86400000,,-1
AUX-SPS-WAVN.OPERATIONS-DESA,3,,,,,
AUX-SPS-WAVN.ORPHAN-PUPPSS,1,2,,86400000,,-1
AUX-SPS-WAVN.ORPHAN-PUPPSS-DESA,3,,,,,
AUX-SPS-WAVN.ORPHAN-PUSRCI,1,2,,86400000,,-1
AUX-SPS-WAVN.ORPHAN-PUSRCI-DESA,3,,,,,
AUX-SPS-WAVN.ORPHAN-PUSUBP,1,2,,86400000,,-1
AUX-SPS-WAVN.ORPHAN-PUSUBP-DESA,3,,,,,
service_check_result,6,1,delete,86400000,1000012,-1

最新更新