grep多列和字段

grep multiple column and field

我有这个文件https://app.box.com/s/qbcvzepzhv1gjbbx9f6fu9by0fsfbr0m

我试着用

grep
awk '{print   }' 1.txt

但是输出是这样的

=========================流

SrcaddrDelta(毫秒)

192.168.0.104192.168.0.101

192.168.0.102192.168.0.1010.49

192.168.0.101192.168.0.1040.49

192.168.0.101192.168.0.1023.54

============================================= =================

平均抖动的第一个值缺失。

然后。我想要这样的输出:

源地址|目标 IP 地址 |平均抖动(毫秒)

192.168.0.104 | 192.168.0.101 | 3.53

192.168.0.102 | 192.168.0.101 | 0.49

192.168.0.101 | 192.168.0.104 | 0.49

192.168.0.101 | 192.168.0102 | 3.54

请帮助我。抱歉我的英语不好

问题: 源数据没有正确的字段分隔符并且字段包含空格。因此仅使用 awk$ 位置不能产生预期的输出。

例如您的字段名称 "Src IP addr" 将转换为 awk 为 =Src=IP=addr

解法:

$ sed '1,2 d; $d' 1.txt | awk 'NF = NF - 1 {print ,"|",,"|",$NF}' | awk 'BEGIN{print "src ip addr | dest ip addr | mean jitter(ms)"}1'
src ip addr | dest ip addr | mean jitter(ms)
192.168.0.104 | 192.168.0.101 | 3.53
192.168.0.102 | 192.168.0.101 | 0.49
192.168.0.101 | 192.168.0.104 | 0.49
192.168.0.101 | 192.168.0.102 | 3.54

详情:

命令: sed '1,2 d; $d' 1.txt
删除第一个 (1d) 和最后一个 ($d) 行,因为与原始 header Src IP addr Port Dest IP addr.... 一样没有用,因为要处理的空格太多。

命令: awk 'NF = NF - 1 {print ,"|",,"|",$NF}'
这里我们解决你提到的第一个问题:"the first value of mean jitter is missing."
由于您的 SSRC 字段包含带空格的值,因此您没有获得 mean jitter(ms) 的第一个值。
要破解这个,awkNF (last field) 你可以操纵。对于您的情况 NF 将等于 Problems 列。因此 NF = NF - 1 通过重新定义最后一个字段序列号给出新值,并且 Mean Jitter(ms) 列行变为新的 NF.

命令: awk 'BEGIN{print "src ip addr | dest ip addr | mean jitter(ms)"}1'
添加新的 header 以匹配预期结果。