嗨我在txt文件中有以下格式的数据
TCP dmz 10.20.10.144:8080 inside 10.1.1.98:59217, idle 0:00:11, bytes 1295, flags UFRIO
TCP dmz 10.20.10.144:8082 inside 10.1.1.98:31949, idle 0:00:13, bytes 956, flags UfrIO
TCP dmz 10.20.10.144:8082 inside 10.1.1.97:60194, idle 0:00:16, bytes 645, flags UfrIO
我想只提取
IP地址和字节字段,因此最终结果应为
10.20.10.144 10.1.1.98 1295
10.20.10.144 10.1.1.98 956
10.20.10.144 10.1.1.97 645
最后,我想按字节(第3列)按第一个字段分组。得到:
10.20.10.144 2896
任何帮助?
感谢
答案 0 :(得分:1)
您可以look-around使用re.findall()
:
>>> [re.findall(r'(?<= )[\d\.]+(?!:)',line) for line in open('your_filename','r')]
[['10.20.10.14', '10.1.1.9', '1295'],
['10.20.10.14', '10.1.1.9', '956'],
['10.20.10.14', '10.1.1.9', '645']]
以下模式r'(?<= )[\d\.]+(?!:)'
匹配数字与点([\d\.]+
)的任意组合,其前面有空格而不是:
。
答案 1 :(得分:1)
如果你想考虑awk:
awk -F '[ ,]' '{sub(/:.+$/, "", $3); sub(/:.+$/, "", $5); print $3, $5, $11}' file
10.20.10.144 10.1.1.98 1295
10.20.10.144 10.1.1.98 956
10.20.10.144 10.1.1.97 645
编辑:根据以下评论:
awk -F '[ ,]' '{sub(/:.+$/, "", $3); a[$3]+=$11} END{for (i in a) print i, a[i]}' file
10.20.10.144 2896
答案 2 :(得分:0)
教科书Awk:正确分割成字段,只打印一些字段,做一些分组算术并在结尾打印出总数:
awk -F'[ :,]' '{print $3, $6, $15; sum[$3]+=$15} END {for (i in sum) print i, sum[i]}'