gpt4 book ai didi

linux - Netflow 列操作 bash

转载 作者:太空宇宙 更新时间:2023-11-04 09:32:52 24 4
gpt4 key购买 nike

我有一个 netflow 输出,其中某些行在字节后显示“M”:

2014-05-10 14:26:49.231    10.335 UDP     114.31.254.227:24874 ->    56.213.85.253:13617        9     1139     1
2014-05-10 14:26:59.494 0.222 UDP 114.31.254.193:17769 -> 165.199.57.179:40012 3 172 1
2014-05-10 14:26:56.015 3.348 TCP 96.196.161.39:80 -> 114.31.255.131:61066 5428 7.8 M 1
2014-05-10 14:26:59.705 0.246 UDP 165.199.57.144:40007 -> 114.31.254.193:17769 3 140 1

可以看到有一个“7.8 M”的实例,我想将其显示为它的真实字节值,而不是兆字节。

我想用字节值替换所有兆字节值(乘以 1,048,576)。

代码如下:match '[number string] M ' 将数字乘以 1048576 并替换

第9-10列在M行

也许使用 awk?:

cat whitespacetrim.out | grep ' M ' | cut -f 9,10 -d ' '| cut -f 1 -d ' ' | awk '{val=$1*1024*1024} END {print val}'|

最佳答案

Gawk 中列宽可变的方法。

awk 'BEGIN{FIELDWIDTHS="101 5 100"}gsub("M","",$2){$2=$2*1048576}1' test | column -t

输出

2014-05-10  14:26:49.231  10.335  UDP  114.31.254.227:24874  ->  56.213.85.253:13617   9     1139         1
2014-05-10 14:26:59.494 0.222 UDP 114.31.254.193:17769 -> 165.199.57.179:40012 3 172 1
2014-05-10 14:26:56.015 3.348 TCP 96.196.161.39:80 -> 114.31.255.131:61066 5428 8.17889e+06 1
2014-05-10 14:26:59.705 0.246 UDP 165.199.57.144:40007 -> 114.31.254.193:17769 3 140 1

说明

  1. 设置列宽,我们想要的字段从位置 101 开始,所以这是将所有其余部分放在第一个字段中的第一个数字,该字段长 5 个字符,因此是第二个字段宽度,然后是 100只是为了捕获其他一切。

  2. 检查字段 2 中是否有 M,同时也将 M 替换为空

  3. 如果是,则字段 2 乘以 1048576

  4. awk 中的
  5. 1 计算结果为真,默认操作是打印该行。

  6. 通过管道进入 column -t 使其看起来像样:)

关于linux - Netflow 列操作 bash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29627704/

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