这是我的最后一行数据:
0 - 0. - 9.051614 pcap_udp_filtered.pcap_mac_sort.txt aodv -节点Da:00:00:00:00:00:03 sa:00:00:00:00:01 10.0.0.1.4915410.0.0.9.50003: UDP,长度512
我希望得到如下输出:
node-0 9.051614 00:00:00:00:03 00:00:00:00:00:01 10.0.0.1 4915410.0.0.9 50003 UDP 512
我读过关于将一个字符串分割成两个变量,但实际上我不需要在以后将它们用作变量,所以也许有任何方法可以切割字符串的某些部分,并且在情况下:10.0.0.1.49154只是将其分割成两个字符串并消除中间的点。(我需要不同列的IP和端口号)。
谢谢你的提示
这个Gawk脚本
gawk -F ' ' '0; END { print gensub(/[.].*$/, "", "g", $1),
$2,
gensub(/^DA:/, "", "g", $3),
gensub(/^SA:/, "", "g", $4),
gensub(/[.][^.]*$/, "", "g", $5),
gensub(/^.*[.]/, "", "g", $5),
gensub(/[.][^.]*$/, "", "g", $6),
gensub(/:/, "", "g", gensub(/^.*[.]/, "", "g", $6)),
gensub(/,$/, "", "g", $7),
$9 }' file
将处理文件的最后一行并产生类似
的输出aodv-node-0-0 9.051614 00:00:00:00:00:03 00:00:00:00:00:01 10.0.0.1 49154 10.0.0.9 50003 UDP 512
它可以与更简单的Awks更兼容,但是你明白这个概念。毫无疑问,每个人都会发现它很容易以……为依据。
这个版本得到一个单独的node-0
,但我不确定这是否是你想要的正确方式:
gawk -F ' ' '0; END { sub(/[.].*$/, "", $1); sub(/aodv-/, "", $1); sub(/-[0-9]$/, "", $1);
print $1,
$2,
gensub(/^DA:/, "", "g", $3),
gensub(/^SA:/, "", "g", $4),
gensub(/[.][^.]*$/, "", "g", $5),
gensub(/^.*[.]/, "", "g", $5),
gensub(/[.][^.]*$/, "", "g", $6),
gensub(/:/, "", "g", gensub(/^.*[.]/, "", "g", $6)),
gensub(/,$/, "", "g", $7),
$9 }' file
如果您的输入是在像这样的单行中,
aodv-node-0-0.pcap_udp_filtered.pcap_MAC_sort.txt 9.051614 DA:00:00:00:00:00:03 SA:00:00:00:00:00:01 10.0.0.1.49154 10.0.0.9.50003: UDP, length 512
,那么您可以运行下面的GNU sed
命令来获得所需的输出,
sed -r 's/^[^-]*-([^-]*?-.)[^ ]* ([0-9.]+) DA:([^ ]*) SA:([^ ]*) ([0-9]{,3}.[0-9]{,3}.[0-9]{,3}.[0-9]{,3}).([0-9]+) ([0-9]{,3}.[0-9]{,3}.[0-9]{,3}.[0-9]{,3}).([0-9]+):(.*)$/1 2 3 4 5 6 7 89/g' file | sed -r 's/^([^,]*),.* ([0-9]+)$/1 2/g'
例子:
$ echo 'aodv-node-0-0.pcap_udp_filtered.pcap_MAC_sort.txt 9.051614 DA:00:00:00:00:00:03 SA:00:00:00:00:00:01 10.0.0.1.49154 10.0.0.9.50003: UDP, length 512' | sed -r 's/^[^-]*-([^-]*?-.)[^ ]* ([0-9.]+) DA:([^ ]*) SA:([^ ]*) ([0-9]{,3}.[0-9]{,3}.[0-9]{,3}.[0-9]{,3}).([0-9]+) ([0-9]{,3}.[0-9]{,3}.[0-9]{,3}.[0-9]{,3}).([0-9]+):(.*)$/1 2 3 4 5 6 7 89/g' | sed -r 's/^([^,]*),.* ([0-9]+)$/1 2/g'
node-0 9.051614 00:00:00:00:00:03 00:00:00:00:00:01 10.0.0.1 49154 10.0.0.9 50003 UDP 512