我有一个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.8M’的实例,我想显示它的真实字节值,而不是兆字节。
我想用它们的字节值(乘以1,048,576)替换所有的兆字节值。
代码如下:匹配'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}'|发布于 2015-04-14 21:16:06
一种在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解释
M,同时也将所述M替换为空1计算为true,默认操作是打印该行。发布于 2015-04-14 21:16:34
使用GNU awk将第3个参数保留为match()和\s/\S的原始间距和字段对齐
$ 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字段替换为新的计算值,填充到它们总共占用的原始宽度。
发布于 2015-04-14 20:59:16
通过awk,
$ 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 1https://stackoverflow.com/questions/29627704
复制相似问题