仅从txt文件中提取ip地址并将它们放入一行

时间:2014-09-09 17:03:03

标签: linux bash

我有一个完整的traceroutes的txt文件及其在此表单上。

  

traceroute到188.164.206.1(188.164.206.1),最多30跳,60字节   包

 1  83.212.10.1 (83.212.10.1)  3.257 ms  4.571 ms *

 2  192.168.199.1 (192.168.199.1)  5.497 ms  3.171 ms  5.537 ms

 3  ihu-1-gw.eier.access-link.grnet.gr (194.177.208.13)  11.188 ms  13.018 ms  11.305 ms

 4  wind.gr-ix.gr (176.126.38.9)  14.421 ms  12.267 ms  14.714 ms
     

traceroute至194.39.121.182(194.39.121.182),最多30跳,60字节   包

     

1 ec2-50-112-0-84.us-west-2.compute.amazonaws.com(50.112.0.84)   2.026 ms 1.986 ms 1.969 ms

     

2 100.64.1.149(100.64.1.149)1.757 ms 100.64.1.171(100.64.1.171)   2.006 ms 100.64.1.157(100.64.1.157)2.772 ms

     

3 * * *

     

4 * * *

     

5 205.251.232.226(205.251.232.226)2.324 ms 205.251.232.166   (205.251.232.166)2.332 ms 205.251.232.226(205.251.232.226)2.988   MS

我试图创建一个脚本来读取文件的所有行,它只会复制(...)内的ip adreses并将它们转移到一行。所以每个traceroute只有一行。 例如,上面的traceroute将成为

83.212.10.1 192.168.199.1 194.177.208.13 176.126.38.9

我想不出任何明显的方法如何做到这一点,提前谢谢。

1 个答案:

答案 0 :(得分:2)

这应该做你想要的。

awk -F'[()]' '/^ / {printf "%s ", $2}'

使用FS的标准值:

awk '/^ / {gsub(/[()]/, "", $3); printf "%s ", $3}'

或者根本不使用正则表达式:

awk '/^ / {printf "%s ", substr($3, 2, (length($3) - 2))}'

编辑:正确处理同一文件中的多个traceroute输出。

awk -F'[()]' '/^ / {printf "%s ", $2; next} /^[^[:space:]]/{print ""}'