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)
的第一个值。
要破解这个,awk
有 NF (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 以匹配预期结果。
我有这个文件https://app.box.com/s/qbcvzepzhv1gjbbx9f6fu9by0fsfbr0m
我试着用
grepawk '{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)
的第一个值。
要破解这个,awk
有 NF (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 以匹配预期结果。