这是我的最终数据:
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,长度512
我希望得到如下输出:
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
我已经读过将一个字符串拆分为两个变量,但实际上我以后不需要将它们用作变量,所以可能有任何方法只是剪切字符串的某些部分,以防万一: 10.0.0.1.49154 只是将它分成两个字符串并摆脱中间的点。 (我需要不同列中的IP和端口号。)
感谢任何提示
答案 0 :(得分:1)
这个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
答案 1 :(得分:1)
如果你的输入是这样的一行,
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 \8\9/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 \8\9/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