首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Netflow列操作bash

Netflow列操作bash
EN

Stack Overflow用户
提问于 2015-04-14 20:45:40
回答 3查看 133关注 0票数 0

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

代码语言:javascript
复制
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.8M’的实例,我想显示它的真实字节值,而不是兆字节。

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

代码如下:匹配'number string M‘将数字乘以1048576,然后替换

该列为9-10,行为M

也许使用awk?:

代码语言:javascript
复制
cat whitespacetrim.out | grep ' M ' | cut -f 9,10 -d ' '| cut -f 1 -d ' ' | awk '{val=$1*1024*1024} END {print val}'|
EN

回答 3

Stack Overflow用户

发布于 2015-04-14 21:16:06

一种在Gawk中具有可变列宽的方式。

代码语言:javascript
复制
awk 'BEGIN{FIELDWIDTHS="101 5 100"}gsub("M","",$2){$2=$2*1048576}1' test | column -t

输出

代码语言:javascript
复制
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开始,这是将所有其余部分放在字段1中的第一个数字,该字段的长度为5个字符,因此这是第二个字段宽度,然后100只是为了捕获其他所有内容。
  2. 检查字段2中是否有M,同时也将所述M替换为空
  3. 如果有,则在awk中将字段2乘以1048576
  4. 1计算为true,默认操作是打印该行。
  5. 将管道导入到<代码>D14,以使其看起来可显示:)<代码>H215<代码>G216
票数 1
EN

Stack Overflow用户

发布于 2015-04-14 21:16:34

使用GNU awk将第3个参数保留为match()\s/\S的原始间距和字段对齐

代码语言:javascript
复制
$ cat tst.awk
NF==11 {
    match($0,/((\S+\s+){7}\S+)((\s+\S+){2})(.*)/,a)
    $0 = a[1] sprintf("%*d",length()-length(a[1]a[5]),$9*1048576) a[5]
}
{ print }
$
$ awk -f tst.awk file
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  8178892     1
2014-05-10 14:26:59.705     0.246 UDP     165.199.57.144:40007 ->   114.31.254.193:17769        3      140     1

((\s+\S+){2}) ()将输入记录划分为3个部分-包括第8个字段的部分((\S+\s+){7}\S+),然后第9个和第10个字段加上它们前面的空格,然后是它后面的所有空格,在本例中是最后一个空格,然后是第11个字段。

赋值然后从前导部分和尾部部分重新创建$0,并将spaces+9th+spaces+10th字段替换为新的计算值,填充到它们总共占用的原始宽度。

票数 1
EN

Stack Overflow用户

发布于 2015-04-14 20:59:16

通过awk,

代码语言:javascript
复制
$ awk '/([0-9]+\.[0-9]+|[0-9]+)[[:blank:]]*M/{$9=$9*1048576;$10=""}{$1=$1}1' file
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29627704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档