我有一个遵循这种格式的命令输出(尽管有更多数据):
192.168.3.158:63402 <-> 192.168.3.1:boe-cms 0 0 1 1054 1 1054 2.000015920 0.0000
192.168.3.226:45873 <-> 192.168.2.117:boe-cms 0 0 1 1054 1 1054 2.000015840 0.0000
192.168.3.39:20224 <-> 192.168.3.55:boe-cms 0 0 1 1054 1 1054 2.000015760 0.0000
192.168.3.19:16442 <-> 192.168.2.102:boe-cms 0 0 1 1054 1 1054 2.000015680 0.0000
192.168.3.81:boe-cms <-> 192.168.3.78:4948 1 1054 0 0 1 1054 2.000015600 0.0000
192.168.3.158:8073 <-> 192.168.2.128:boe-cms 0 0 1 1054 1 1054 2.000015520 0.0000
192.168.3.247:powwow-client <-> 192.168.2.247:boe-cms 0 0 1 1054 1 1054 2.000015440 0.0000
192.168.2.212:boe-cms <-> 192.168.3.145:link 1 1054 0 0 1 1054 2.000015360 0.0000
192.168.3.165:26944 <-> 192.168.2.254:boe-cms 0 0 1 1054 1 1054 2.000015280 0.0000
192.168.2.239:boe-cms <-> 192.168.3.104:6307 1 1054 0 0 1 1054 2.000015200 0.0000
192.168.3.127:64857 <-> 192.168.3.24:boe-cms 0 0 1 1054 1 1054 2.000015120 0.0000
192.168.3.21:boe-cms <-> 192.168.3.103:856 1 1054 0 0 1 1054 2.000015040 0.0000
192.168.3.131:opendeploy <-> 192.168.2.169:boe-cms 0 0 1 1054 1 1054 2.000014960 0.0000
我最终想要将IP地址解析为两个单独的列表。这应该很简单但首先我想在每行中的第二个IP地址之后删除数据。据我所知,我不能将空格视为列,因为它们不是标签,所以我尝试从连续7个空格开始的参数扩展(表示IP的结束):
str="${str%%" "*}"
这会忽略行,并产生此输出:
192.168.3.158:63402 <-> 192.168.3.1:boe-cms
那么我可以将命令更改为仅删除直到行尾,或者还有什么会这样做?我试过用'\ n'替换'*'没有运气。谢谢!
答案 0 :(得分:0)
您可以将此awk命令与字段分隔符一起用作:
或空格来获取这两个IP地址:
awk -F '[: ]+' '{print $1, $4}' file
192.168.3.158 192.168.3.1
192.168.3.226 192.168.2.117
192.168.3.39 192.168.3.55
192.168.3.19 192.168.2.102
192.168.3.81 192.168.3.78
192.168.3.158 192.168.2.128
192.168.3.247 192.168.2.247
192.168.2.212 192.168.3.145
192.168.3.165 192.168.2.254
192.168.2.239 192.168.3.104
192.168.3.127 192.168.3.24
192.168.3.21 192.168.3.103
192.168.3.131 192.168.2.169
如果您从命令获得输入,请使用:
command | awk -F '[: ]+' '{print $1, $4}'