如何分割字符串和摆脱字符之间



这是我的最后一行数据:

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

最新更新